MQL4 Metatrader4 - for-Loop wird anscheinend zu oft durchlaufen

D81

Neues Mitglied
Hallo.

Hab nen EA für den Metatrader 4, der in einigen for-Schleifen mehrere Orders öffnen soll. So wies aussieht, werden die aber irgendwie viel öfter durchlaufen, als sie sollen. Teilweise irgendwie über 100 mal. :oops: Ist hier zwar kein MQL-Forum, aber da MQL4 im Großen und Ganzen das Selbe wie C++ ist...

Hab schon etliche Male alles Mögliche geändert und getestet und anders geschrieben, er öffnet irgendwie immer viel mehr Orders als er soll.

Hier soll er die 1. Orders öffnen. Anscheinend fängt er da irgendwo irgendwie schon an, falsch zu zählen.
C++:
//Wenn nach OC1 gar keine Orders offen sind...
if (fiLO == false && fiSH == false && neLO == false && neSH == false) {

  //...Opened-Zähler auf 0 setzen...
  Opened_Sel = 0;
  Opened_Buy = 0;

  //...und wenn zur Zeit Orders geöffnet werden dürfen, FirstSel und FirstBuy öffnen.
  if (Hour() >= FromH && Hour() <= TillH) {

    for (j = OrdersNeed_Multi; j > 0; j--) { // ?

      if (IsTradeAllowed())
        TI_FiSel = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, SL_Sel, TP_Sel, NULL, MN_FiSel, Orange);
      if (IsTradeContextBusy())
        Sleep(slMS);
      Opened_Sel++;

      Print("Opened FiSel:", "-j=", j, "-Opened Sel=", Opened_Sel, "-IsTradeContextBusy():", IsTradeContextBusy(), "-Opened_Buy:", Opened_Buy

      );

      if (IsTradeAllowed())
        TI_FiBuy = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, SL_Buy, TP_Buy, NULL, MN_FiBuy, White);
      if (IsTradeContextBusy())
        Sleep(slMS);
      Opened_Buy++;

      Print("Opened FiBuy:",

            "-j=", j, "-Opened_Buy:", Opened_Buy, "-IsTradeContextBusy():", IsTradeContextBusy(), "-Opened Sel=", Opened_Sel

      );
    }
  }
} // Nach OC1 gar keine Orders offen.
Ab hier ungefähr scheint die Zählerei dann irgendwie völlig falsch zu sein:
C++:
//Wenn nach OC2 noch kein NextBuy offen ist...
if (neLO == false) { // ?

  //  ...OOP für NextSel-by-FirstBuy berechnen:
  if (OrderSelect(TI_FiBuy, SELECT_BY_TICKET)) {
    if (OrderSymbol() == Symbol()) {

      OOP_Sel_FiBuy = NormalizeDouble(OrderOpenPrice() - D_ONO * Point, Digits);

      if (Bid <= OOP_Sel_FiBuy) { // ?

        Need_Sel = Opened_Buy * OrdersNeed_Multi;

        for (Need_Sel; Need_Sel > 0; Need_Sel--) { // ?
          if (IsTradeAllowed())
            TI_NeSel = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, SL_FiSel, TP_FiSel, NULL, MN_NeSel, Blue);
          if (IsTradeContextBusy())
            Sleep(slMS);
          Opened_Sel++;

          Print("Sended NeSel-by-FiBuy:",

                "-Opened_Buy=", Opened_Buy, "-Need_Sel=", Need_Sel, "-OrdersNeed_Multi=", OrdersNeed_Multi, "-Opened_Sel=", Opened_Sel,

                "-Need_Buy=", Need_Buy,

                "-IsTradeContextBusy():", IsTradeContextBusy()

          );
        }
      }
    }
  }
} // Nach OC2 noch NextBuy offen.

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

//...Wenn nach OC2 doch NextBuy offen ist...
if (neLO == true) {

  //  ...OOP für NextSel-by-NextBuy berechnen:
  if (OrderSelect(TI_NeBuy, SELECT_BY_TICKET)) {
    if (OrderSymbol() == Symbol()) {

      OOP_Sel_NeBuy = NormalizeDouble(OrderOpenPrice() - D_ONO * Point, Digits);

      if (OOP_Sel_NeBuy > SL_FiSel) {

        if (Bid <= OOP_Sel_NeBuy) {

          Need_Sel = Opened_Buy * OrdersNeed_Multi;

          for (Need_Sel; Need_Sel > 0; Need_Sel--) { // ?
            if (IsTradeAllowed())
              TI_NeSel = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, SL_FiSel, TP_FiSel, NULL, MN_NeSel, Blue);
            if (IsTradeContextBusy())
              Sleep(slMS);
            Opened_Sel++;

            Print("Sended NeSel-by-NeBuy:",

                  "-Opened_Sel=", Opened_Sel, "-Need_Sel=", Need_Sel,

                  "-Opened_Buy=", Opened_Buy,

                  "-OrdersNeed_Multi=", OrdersNeed_Multi,

                  "-Need_Buy=", Need_Buy,

                  "-IsTradeContextBusy():", IsTradeContextBusy()

            );
          }
        }
      }
    }
  }
} // Nach OC2 doch NextBuy offen.

//=============================================================================================================
// ( O C 2 )   O P E N   N E X T B U Y
//=============================================================================================================

//Wenn nach OC2 noch kein NextSel offen ist...
if (neSH == false) {

  //  ...OOP für NextBuy-by-FirstSel berechnen:
  if (OrderSelect(TI_FiSel, SELECT_BY_TICKET)) {
    if (OrderSymbol() == Symbol()) {

      OOP_Buy_FiSel = NormalizeDouble(OrderOpenPrice() + D_ONO * Point, Digits);

      if (Ask >= OOP_Buy_FiSel) {

        Need_Buy = Opened_Sel * OrdersNeed_Multi;

        for (Need_Buy; Need_Buy > 0; Need_Buy--) { // ?
          if (IsTradeAllowed())
            TI_NeBuy = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, SL_FiBuy, TP_FiBuy, NULL, MN_NeBuy, Blue);
          if (IsTradeContextBusy())
            Sleep(slMS);
          Opened_Buy++;

          Print("Sended NeBuy-by-FiSel:",

                "-Opened_Sel=", Opened_Sel, "-OrdersNeed_Multi=", OrdersNeed_Multi, "-Need_Buy=", Need_Buy, "-Opened_Buy=", Opened_Buy,
                "-(IsTradeContextBusy():", IsTradeContextBusy()

          );
        }
      }
    }
  }
} // Nach OC2 kein NextSel offen.

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

// Wenn nach OC2 doch NextSel offen ist...
if (neSH == true) {

  //  ...OOP für NextBuy-by-NextSel berechnen:
  if (OrderSelect(TI_NeSel, SELECT_BY_TICKET)) {
    if (OrderSymbol() == Symbol()) {

      OOP_Buy_NeSel = NormalizeDouble(OrderOpenPrice() + D_ONO * Point, Digits);

      if (OOP_Buy_NeSel < SL_FiSel) {

        if (Bid >= OOP_Buy_NeSel) {

          Need_Buy = Opened_Sel * OrdersNeed_Multi;

          for (Need_Buy; Need_Buy > 0; Need_Buy--) { // ?
            if (IsTradeAllowed())
              TI_NeBuy = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, SL_FiBuy, TP_FiBuy, NULL, MN_NeBuy, Blue);
            if (IsTradeContextBusy())
              Sleep(slMS);
            Opened_Buy++;

            Print("Sended NeBuy-by-NeSel:",

                  "-Need_Buy=", Need_Buy, "-Opened_Buy=", Opened_Buy, "-OrdersNeed_Multi=", OrdersNeed_Multi,

                  "-Opened_Sel=", Opened_Sel,

                  "-IsTradeContextBusy():", IsTradeContextBusy()

            );
          }
        }
      }
    }
  }
} // Nach OC2 doch NextSel offen.

//=============================================================================================================
// N A C H   O C 1   F I R S T S E L & F I R S T B U Y   O F F E N
//============================================================================================================
} // OC1
//============================================================================================================
// E A   F U N K T I O N E N   B E E N D E N
//=============================================================================================================
} // void OnTick()
 

Anhänge

  • LoSh_Ti_TPSL_v2d_PRINT.zip
    3,7 KB · Aufrufe: 326
Zurück
Oben Unten