Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Hedge EA (http://www.expert-advisor.com/forum/showthread.php?t=6634)

MA-EA 17.04.20 21:52

Hedge EA
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo.

Ich glaube, jetzt braucht das Teil wirklich nen eigenes Thema.

Hab, wie gesagt, eine Art Hedge-EA am Testen. Siehe Anhang. Soll ständig im selben WP gleichzeitig Long und Short investiert sein. Sobald die Order einer Richtung geschlossen wurde, weil sie durch den SL oder TP ging, soll sofort die nächste Order in die selbe Richtung geöffnet werden. Das klappt im Gegensatz zu vorherigen Versionen auch einigermaßen gut. :rolleyes: Leider aber anscheinend nur vormittags. :confused: Bei einigen WP hat er heute nur bis 9 oder 10 Uhr geöffnet und danach irgendwie gar nix mehr gemacht. Oder lag das vielleicht doch an zu hohen Spreads? Er durfte nen max Spr. von 20 akzeptieren.

2. hab ich was eingebaut, was den OrderProfit() der letzten geschlossenen Order auslesen soll. Wenn der >0.0 war, soll zu den Lots ein einstellbarer Wert dazu addiert werden. Er hat sie zwar auch erhöht, aber absolut nicht so, wie er sollte. Er sollte um 0.01 jedes mal erhöhen, wenn die letzte Order Gewinn gemacht hat. Er hat aber irgendwie jedes Mal mehrere ganze Lots dazu gerechnet! :eek: Flippt das Ding total aus oder was?

Die Beschreibung ist vielleicht nicht so einfach zu verstehen, aber Fehler sind ja eigentlich keine im Code oder doch?
Code:

extern double LotsBuy=0.01;
extern double LotsSel=0.01;

extern string esLPOCP1="Lots Buy/Sell";
extern string esLPOCP2="+ LotsPlus";
extern string esLPOCP3="if Order close";
extern string esLPOCP4="with Profit";

extern double LotsPlus=0.01;

extern string esOLLPOLP1="OrderLots of";
extern string esOLLPOLP2="last Profit Order";
extern string esOLLPOLP3="+ LotsPlus?";

extern bool OLPO_LP=false; // Zum Testen aus

Code:

//=============================================================================================================
// O R D E R  L O T S  E R H Ö H E N
//=============================================================================================================


if(OrderSelect(TiBuy,SELECT_BY_TICKET,MODE_HISTORY)){

  if(OrderProfit()>0.0){

    if(OLPO_LP==false)LotsBuy = LotsBuy + LotsPlus;
   
    if(OLPO_LP==true)LotsBuy = OrderLots() + LotsPlus;}

}



  if(OrderSelect(TiSel,SELECT_BY_TICKET,MODE_HISTORY)){

  if(OrderProfit()>0.0){

    if(OLPO_LP==false)LotsSel = LotsSel + LotsPlus;
 
    if(OLPO_LP==true)LotsBuy = OrderLots() + LotsPlus;}

}


MA-EA 20.04.20 21:22

Liste der Anhänge anzeigen (Anzahl: 1)
Hallo.

Warum spielen die Lots verrückt und warum öffnet er nur ein paar Mal Orders wie er soll und tut dann anscheinend gar nix mehr? :confused:

MA-EA 24.04.20 08:37

Liste der Anhänge anzeigen (Anzahl: 1)
Hat/te Jemand nen Demo-Konto bei ActivTrades? Ganz egal, wie ich den EA schreibe, es gibt immer wieder lange Pausen beim Order öffnen. Aber so richtig kann er ja nur funktionieren, wenn er ständig Long und Short im selben WP ist. Ich kanns mir eigentlich nur noch so erklären, dass ActivTrades doch irgendwelche Begrenzungen hat, was das Hedgen und Scalpen angeht.

Oder gibts doch irgendwelche Fehler im Code? Irgendwas, was zwar nicht wirklich falsch ist, aber eben trotzdem dafür sorgt, dass der EA nicht so läuft, wie er soll?
Code:

//=============================================================================================================
// P R O P E R T Y
//============================================================================================================*/
// #property strict
// #property strict sorgt anscheinend dafür, dass Kommentare im Konfig-Fenster im MT4 sichtbar sind.

#property copyright"LoSh_AlwInv_SLTP_LP.mq4"
#property copyright"daniel-rudloff@web.de"
//=============================================================================================================
// B E S C H R E I B U N G
//=============================================================================================================
extern string TOY="true = on / yes";
extern string FON="false = off / no";
//=============================================================================================================
// E I N S T E L L U N G E N
//=============================================================================================================

extern string MN="Magic Numbers";
extern int Buy_MN=2;
extern int Sell_MN=4;

//-----------------------------------------------------------------------------------------------------------*/

extern string OOO1="Open Orders Only";
extern string OOO2="from/till?";
extern string OOO3="(Server Time)";

input bool Open_Only_From_Till=true; //

extern int Open_From_Hour=7;
extern int Open_From_Min=0;

extern int Open_Till_Hour=17;
extern int Open_Till_Min=26; //

//-----------------------------------------------------------------------------------------------------------*/

extern string IOOFTF1="if";
extern string IOOFTF2="Open_Only_From_Till = false";
extern string IOOFTF3="Close_all_Orders_after";
extern string IOOFTF4="= false too";

extern string CAOTOC1="Close all Orders after";
extern string CAOTOC2="(Server Time)";

extern bool Close_all_Orders_after=true;

extern int Close_after_Hour=17;
extern int Close_after_Min=27;

//-----------------------------------------------------------------------------------------------------------*/

extern int Slippage=99999999;

//-----------------------------------------------------------------------------------------------------------*/


extern double LotsBuy=0.01;
extern double LotsSel=0.01;


extern string esLPOCP1="Lots Buy/Sell";
extern string esLPOCP2="+ LotsPlus";
extern string esLPOCP3="if Order close";
extern string esLPOCP4="with Profit";

extern double LotsPlus=0.01;


extern string esOLLPOLP1="OrderLots of";
extern string esOLLPOLP2="last Profit Order";
extern string esOLLPOLP3="+ LotsPlus?";

extern bool OLPO_LP=false; // Zum Testen aus


//-----------------------------------------------------------------------------------------------------------*/

extern int SL=1600; // 1600 testen

//-----------------------------------------------------------------------------------------------------------*/

extern int TP=50; // Zum Testen 50

//=============================================================================================================
// D E K L A R A T I O N E N
//=============================================================================================================

bool OMbuy,OMsel,OCbuy,OCsel;

double Buy_SL,Sel_SL,Buy_TP,Sel_TP;

int i,j,TiBuy,TiSel;

//=============================================================================================================
// I N I T / D E I N I T
//=============================================================================================================
int OnInit(){
  return(0);}
void OnDeinit(const int reason){
  return;}
//=============================================================================================================
// E A  F U N K T I O N E N  S T A R T
//=============================================================================================================
int start(){
//=============================================================================================================
// O P E N  T I M E
//=============================================================================================================


bool RT=false; // RT = Right Time
if( (Open_Only_From_Till==false) || (Open_Only_From_Till==true&&Hour()>=Open_From_Hour&&Minute()>=Open_From_Min&&Hour()<=Open_Till_Hour&&Minute()<=Open_Till_Min) )RT=true;


//=============================================================================================================
// L O T S
//=============================================================================================================


double Min_L=MarketInfo(Symbol(),MODE_MINLOT);
double Max_L=MarketInfo(Symbol(),MODE_MAXLOT);

if(LotsBuy<Min_L)LotsBuy=Min_L;
if(LotsSel<Min_L)LotsSel=Min_L;

if(LotsBuy>Max_L)LotsBuy=Max_L;
if(LotsSel>Max_L)LotsSel=Max_L;


//=============================================================================================================
// S T O P  L O S S
//=============================================================================================================


//SL auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(SL<1){
  Buy_SL=0.0;
  Sel_SL=0.0;}

  else{
    Buy_SL=NormalizeDouble(Ask-SL*_Point,_Digits);
    Sel_SL=NormalizeDouble(Bid+SL*_Point,_Digits);}

//SL genauso groß wie Minstoplevels machen, wenn er kleiner ist:
double MSL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(Buy_SL<MSL)Buy_SL=MSL;
if(Sel_SL<MSL)Sel_SL=MSL;


//=============================================================================================================
// T A K E  P R O F I T
//=============================================================================================================


//TP auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(TP<1){
  Buy_TP=0.0;
  Sel_TP=0.0;}

  else{
    Buy_TP=NormalizeDouble(Ask+TP*_Point,_Digits);
    Sel_TP=NormalizeDouble(Bid-TP*_Point,_Digits);}


//=============================================================================================================
// P R U E F E N  O B  O R D E R S  G E O E F F N E T  S I N D
//=============================================================================================================


bool BuyInv=false;
bool SelInv=false;


for(i=OrdersTotal()-1;i>=0;i--){
  if(OrderSelect(i,SELECT_BY_POS)){
    if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol())BuyInv=true;
    if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol())SelInv=true;}}


//=============================================================================================================
// O P E N  O R D E R S
//=============================================================================================================


if( RT==true ){


  if( BuyInv==false && IsTradeAllowed()==true ){
 
    TiBuy=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,Slippage,Buy_SL,Buy_TP,NULL,Buy_MN,0,Blue);
   
    return(TiBuy);}



  if( SelInv==false && IsTradeAllowed()==true ){
 
    TiSel=OrderSend(Symbol(),OP_SELL,LotsSel,Bid,Slippage,Sel_SL,Sel_TP,NULL,Sell_MN,0,Red);
   
    return(TiSel);}

}


//=============================================================================================================
// O R D E R  L O T S  E R H Ö H E N
//=============================================================================================================


if(OrderSelect(TiBuy,SELECT_BY_TICKET,MODE_HISTORY)){


  if(OrderProfit()>0.0){


    if(OLPO_LP==false)LotsBuy = LotsBuy + LotsPlus;
   
    if(OLPO_LP==true)LotsBuy = OrderLots() + LotsPlus;}

}




if(OrderSelect(TiSel,SELECT_BY_TICKET,MODE_HISTORY)){


  if(OrderProfit()>0.0){


    if(OLPO_LP==false)LotsSel = LotsSel + LotsPlus;
 
    if(OLPO_LP==true)LotsSel = OrderLots() + LotsPlus;}

}


//=============================================================================================================
// C L O S E  O R D E R S
//=============================================================================================================


for(j=OrdersTotal()-1;j>=0;j--){
  if(OrderSelect(j,SELECT_BY_POS)){


    if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol()){
     
      if(Close_all_Orders_after==true&&Hour()>=Close_after_Hour&&Minute()>=Close_after_Min){
     
        if(IsTradeAllowed()==true)OCbuy=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Black);}}



    if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol()){
     
      if(Close_all_Orders_after==true&&Hour()>=Close_after_Hour&&Minute()>=Close_after_Min){

        if(IsTradeAllowed()==true)OCsel=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Orange);}}

}}


//=============================================================================================================
// E A  F U N K T I O N E N  B E E N D E N
//=============================================================================================================
return(0);}


TogoTiger 24.04.20 12:39

So genau habe ich jetzt deinen Code nicht analysiert. Aber du solltest dir mal überlegen, wann genau dein Programm was machen muss. Deine Funktion für Lotserhöhung kann so, wie du das programmiert hast, mehrmals für die gleiche Order aufgerufen werden. Mach mal Prints in dein Programm und guck dir das an.

Mach das doch genau nur dann, wenn du feststellst, dass deine Buy oder Sell-Order in TP oder SL gelaufen ist.
Jetzt kann bei bei jedem Tick Lotserhöhung aufgerufen werden, wenn Orderopen nicht ausgeführt wurde, aus welchem Grund auch immer.

Meine Programme prüfen bei jedem OrderSend, ob alles richtig abgelaufen ist und wiederholen dann den Befehl, wenn nötig. Und das bis zu einer einzustellenden Anzahl Wiederholungen. Und wenns nicht geht, dann schau ich dafür, dass nicht bei jedem Tick etwas gemacht wird, das ich nicht will.

Ich habe z.B. auch sowas drin vor der OrdeEröffnung

while(IsTradeContextBusy())
Sleep(10);

Du machst auch bei jedem Tick Dinge, die unnötig sind, z.B. Min Lotsize, TP und SL einstellen

TogoTiger 25.04.20 10:07

Noch ein Rat:
Bau sowas in deinen Code ein:


Code:

#include <stderror.mqh>
#include <stdlib.mqh>

int      Fehlercode;
string  Fehlerbeschreibung;
string  Fehlerausgabe;

// nach OrderSend oder OrderClose oder wann du willst:

      if(TiBuy == -1)
      {
        Fehlercode = GetLastError();
        Fehlerbeschreibung = ErrorDescription(Fehlercode);
        Fehlerausgabe = StringConcatenate("Eröffnung Kauf-Order:",Fehlercode,": ",Fehlerbeschreibung);
        Print(Fehlerausgabe);
      }

Ich habe deinen Code mit dem DAX ausprobiert, und es ist wirklich so, dass Lotserhöhung mehrmals aufgerufen wird. Damit kann, wenn das oft passiert, Lotsize bis rieisg gross erhöht werden.
Aber ganz genau weiss ich auch nicht, wann das passiert. Dein Code ist nicht so programmiert, dass er sicher läuft, wenn Fehler passieren. Da musst du schon selber suchen. Wenn du Prints in dein Programm einbaust, sieht du in der Console ja, wann was abläuft.
Es gibt genügend Beispiele im Netz, wie man sicheren Code programmiert und wie man Fehler abfängt. Merk dir: Errorhandling ist etwas vom Wichtigsten bei sauberer Programmierung. Und du machst da genau nichts.

MA-EA 26.04.20 21:37

Liste der Anhänge anzeigen (Anzahl: 1)
Ich vermute, dass die Lots verrückt spielen, weil sie in der selben Anweisung erst abgefragt und im nächsten Schritt verändert werden... In C++ könnte man das vielleicht als ne Art Überladen bezeichnen. :rolleyes:

Aber selbst wenn man das mit extra Variablen hin bekommen sollte, ist das Kernproblem des EA, dass er nicht ständig im Markt ist wie er soll, sondern immer wieder lange Pausen macht...

TogoTiger 27.04.20 07:50

Nein, deine Vermutung mit 'Ueberlagerung' ist totaler Blödsinn.
Der Fehler liegt da:
if(OrderSelect(TiBuy,SELECT_BY_TICKET,MODE_HISTORY))

MODE_HISTORY geht nur bei SELECT_BY_POS

Steht auch so in der Doku:

pool=MODE_TRADES

[in] Optional order pool index. Used when the selected parameter is SELECT_BY_POS. It can be any of the following values:

MODE_TRADES (default)- order selected from trading pool(opened and pending orders),
MODE_HISTORY - order selected from history pool (closed and canceled order).


So wie du jetzt abfragst, wird Lotsize bei jedem Tick erhöht, sobald OrderProfit > 0 ist.

Auch wenn du das korrigierst, wird Lotsize nie erhöht, weil deine Ticketnummer jeweils die aktuelle TicketNr ist, nicht die der letzten Order. Du musst das dann machen, wenn du feststellst, dass deine Order in den TP gelaufen ist, nicht nachdem du eine neue Order eröffnet hast. Wie du das genau machst, musst jetzt aber selber herausfinden. Ich habe wenig Lust, dir diesen EA so zu programmieren, dass er läuft. Zumal die Strategie eh nicht funktioniert.

Ich habs soeben nochmals laufen lassen, diesmal mit EURUSD. Er ist immer im Markt drin, aber natürlich nur mit Lotsize 0.01.

Hast du eingebaut, was ich dir empfohlen habe? Mach doch mal ein paar Print ins Porgramm. Oder weisst du ev. nicht, wie man solche Prints sieht:
Ansicht / Terminal, dann unten Experten anklicken und dann siehst du schön, was abläuft, auch, warum er keine Order eröffnet.

So läufts jedenfalls, und es macht auch immer Orders auf.
Wenn du den Experten startest, macht er beim ersten Tick BuyOrder auf, beim zweiten Tick SellOrder. Willst du das so?
Nochmals: Ueberleg dir genau, was du wann machen willst, und mach nicht bei jedem Tick Dinge, die du nicht willst und Anderes nicht, was du gerne möchtest. Kleiner Tip: nach return(TiBuy); gehts erst beim nächsten Tick weiter.

Code:

//=============================================================================================================
// O P E N  O R D E R S
//=============================================================================================================


if( RT==true ){


  if( BuyInv==false && IsTradeAllowed()==true )
  {

  while(IsTradeContextBusy())
        Sleep(10);
 
    TiBuy=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,Slippage,Buy_SL,Buy_TP,NULL,Buy_MN,0,Blue);
    Print ("Open buy ",TiBuy," LotsBuy: ",LotsBuy);

      if(TiBuy == -1)
        {
        Fehlercode = GetLastError();
        Fehlerbeschreibung = ErrorDescription(Fehlercode);
        Fehlerausgabe = StringConcatenate("Eröffnung Kauf-Order:",Fehlercode,": ",Fehlerbeschreibung);
        Print(Fehlerausgabe);
        }

    return(TiBuy);
  }


  if( SelInv==false && IsTradeAllowed()==true )
  {
 
  while(IsTradeContextBusy())
        Sleep(10);

    TiSel=OrderSend(Symbol(),OP_SELL,LotsSel,Bid,Slippage,Sel_SL,Sel_TP,NULL,Sell_MN,0,Red);
    Print ("Open Sell ",TiSel," LotsSel: ",LotsSel);

      if(TiSel == -1)
        {
        Fehlercode = GetLastError();
        Fehlerbeschreibung = ErrorDescription(Fehlercode);
        Fehlerausgabe = StringConcatenate("Eröffnung Kauf-Order:",Fehlercode,": ",Fehlerbeschreibung);
        Print(Fehlerausgabe);
        }

  return(TiSel);
  }

}


//=============================================================================================================
// O R D E R  L O T S  E R H Ö H E N
//=============================================================================================================


if(OrderSelect(TiBuy,SELECT_BY_POS,MODE_HISTORY)){


  if(OrderProfit()>0.0){

    if(OLPO_LP==false)LotsBuy = LotsBuy + LotsPlus;
   
    if(OLPO_LP==true)LotsBuy = OrderLots() + LotsPlus;}
    Print ("LotsBuy erhöhen ", TiBuy," OrdeerProfit: ",DoubleToString(OrderProfit(),2)," LotBuy: ",LotsBuy);

}

if(OrderSelect(TiSel,SELECT_BY_POS,MODE_HISTORY)){


  if(OrderProfit()>0.0){


    if(OLPO_LP==false)LotsSel = LotsSel + LotsPlus;
 
    if(OLPO_LP==true)LotsSel = OrderLots() + LotsPlus;}
    Print ("LotsSel erhöhen ",TiSel," OrdeerProfit: ",DoubleToString(OrderProfit(),2)," LotsSel: ",LotsSel);

}

Warum deine Strategie nur Verluste bringt, haben wir schon vor etrwa 2 Jahren diskutiert. Das lassen wir diesmal lieber bleiben.

TogoTiger 27.04.20 11:45

Du fragst OrderHistory total falsch ab.

So etwa gehts nämlich, und du machst die Abfrage in der History nur 1 x pro Order:

Code:

int LastBuy = 0;
int LastSel = 0;
int History_index = 0;
int LastHistory_index = 0;
.
.
.

//========================================================
// P R U E F E N  O B  O R D E R S  G E O E F F N E T  S I N D
//=============================================================================================================


bool BuyInv=false;
bool SelInv=false;

for(i=OrdersTotal()-1;i>=0;i--)
{
  if(OrderSelect(i,SELECT_BY_POS))
  {
      if(OrderType()==OP_BUY &&OrderMagicNumber()==Buy_MN &&OrderSymbol()==Symbol()) BuyInv=true;
      if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol()) SelInv=true;
  }
}


//------------------------------
// OrderLots für Buy erhöhen
//----------------------------

History_index = OrdersHistoryTotal();
if (LastHistory_index != History_index)
{
  if (LastBuy > 0)
  {
      //Print ("Gewinn LastBuy fragen: ",LastBuy);
      for(i=History_index;i>=0;i--)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
            if(OrderTicket() == LastBuy)
            {
              Print ("OrderProfit LastBy: ",LastBuy," ",DoubleToString(OrderProfit(),2));
              if (OrderProfit()>0.0)
              {
                  if(OLPO_LP==false)LotsBuy = LotsBuy + LotsPlus;   
                  if(OLPO_LP==true)LotsBuy = OrderLots() + LotsPlus;
              }
              Print ("LotBuy: ",LotsBuy);
              LastBuy = 0;
            }
        }
      }
  }
// --------------------------
// OrderLots für Sell erhöhen
// --------------------------
  if (LastSel > 0)
  {
      //Print ("Gewinn LastSeL fragen: ",LastSel);
      for(i=History_index;i>=0;i--)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
            if(OrderTicket() == LastSel)
            {
              Print ("OrderProfit LastSel: ",LastSel," ",DoubleToString(OrderProfit(),2));
              if (OrderProfit()>0.0)
              {
                  if(OLPO_LP==false)LotsSel = LotsSel + LotsPlus;
                  if(OLPO_LP==true)LotsSel = OrderLots() + LotsPlus;
              }
              Print (" LotsSel: ",LotsSel);
              LastSel = 0;
            }
        }
      }
  }
}
LastHistory_index = History_index;

//=============================================================================================================
// O P E N  O R D E R S
//=============================================================================================================
.
.
.


TogoTiger 27.04.20 19:35

Ich habe noch was vergessen, in die Antwort einzufügen. Int LastBuy und LastSel musst natürlich nach Order Eröffnung füllen, z.B. so:

Code:

//=============================================================================================================
// O P E N  O R D E R S
//=============================================================================================================


if( RT==true )
{
  if( BuyInv==false && IsTradeAllowed()==true )
  {
      while(IsTradeContextBusy())
        Sleep(10);
      TiBuy=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,Slippage,Buy_SL,Buy_TP,NULL,Buy_MN,0,Blue);
    // Print ("Open buy ",TiBuy," LotsBuy: ",LotsBuy);

      if(TiBuy == -1)
      {
        Fehlercode = GetLastError();
        Fehlerbeschreibung = ErrorDescription(Fehlercode);
        Fehlerausgabe = StringConcatenate("Eröffnung Kauf-Order:",Fehlercode,": ",Fehlerbeschreibung);
        Print(Fehlerausgabe);
      }
      LastBuy = TiBuy;
      return(TiBuy);
  }

  if( SelInv==false && IsTradeAllowed()==true )
  {
      while(IsTradeContextBusy()) Sleep(10);
   
      TiSel=OrderSend(Symbol(),OP_SELL,LotsSel,Bid,Slippage,Sel_SL,Sel_TP,NULL,Sell_MN,0,Red);
      // Print ("Open Sell ",TiSel," LotsSel: ",LotsSel);

      if(TiSel == -1)
      {
        Fehlercode = GetLastError();
        Fehlerbeschreibung = ErrorDescription(Fehlercode);
        Fehlerausgabe = StringConcatenate("Eröffnung Kauf-Order:",Fehlercode,": ",Fehlerbeschreibung);
        Print(Fehlerausgabe);
      }
      LastSel = TiSel;
      return(TiSel);
  }


MA-EA 29.04.20 00:14

Liste der Anhänge anzeigen (Anzahl: 1)
Hallo.

Mit den ganzen Fehlermeldungen muss ich mich noch mal beschäftigen.

Code:

if( IsTradeContextBusy()==true )Sleep(Sl_MS);
oder
Code:

while( IsTradeContextBusy()==true )Sleep(Sl_MS);
Sl_MS kann man in den Globalen Variablen eintragen.

Wie wählt man die zuletzt geschlossene Order aus? Überall steht was Anderes. :confused: Wie gesagt soll, wenn die letzte geschlossene Order Gewinn gemacht hat, die Lots in die jeweilige Richtung erhöht werden. Also wenn z.B. der letzte Buy mit 0.1 Lot mit Gewinn geschlossen wurde, soll der nächste Buy z.B. um 0.1 Lot erhöht, also mit 0.2 Lot raus geschickt werden. Wenn der wieder Gewinn macht, soll der Buy danach wieder um 0.1 Lot auf 0.3 Lot erhöht werden und immer so weiter. Muss beim Index oder bei dieser Nummer nun 0 oder j oder was sonst eingetragen werden, um rauszufinden, ob die letzte Order in eine Richtung Gewinn gemacht hat? :confused:
Code:

//=============================================================================================================
// O R D E R  L O T S  E R H Ö H E N
//=============================================================================================================


for(int j=OrdersTotal()-1;i>=0;i--){
  if(OrderSelect(0,SELECT_BY_POS,MODE_HISTORY)){


    if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol() && OrderCloseTime()!=0 ){

      if(OrderProfit()>0.0)LotsBuy = LotsPlus + last_L_Buy;}


    if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol() && OrderCloseTime()!=0 ){

      if(OrderProfit()>0.0)LotsSel = LotsPlus + last_L_Sel;}


}}



Alle Zeitangaben in WEZ +2. Es ist jetzt 11:41 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum