Fragen von einem "Dummy" - Seite 51

 

Vielen Dank , papaklass, es hat funktioniert, jetzt werde ich versuchen, den Unterschied zu verstehen.

 

Warum Expert Advisor an diesem Stück Code hängt:

if(Orders_Total!=0)
  {
   for(i=Orders_Total;i>=0;i--)
     {
      Alert(Orders_Total);
      if(Symbol()==PositionGetSymbol(i))
        {
         OpenPrice=PositionGetDouble(POSITION_PRICE_OPEN);
         OrderLot = PositionGetDouble(POSITION_VOLUME);
         StopLoss = PositionGetDouble(POSITION_SL);
         TakeProfit=PositionGetDouble(POSITION_TP);
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            for(i=0;i<12;i++)
              {
               if(Price[i].low<lowest)
                 {
                  lowest=Price[i].low;
                 }
              }
            Alert(lowest);
            SL=NormalizeDouble(lowest-spread-_Point,_Digits);
            if(StopLoss<SL)
              {
               request.action=TRADE_ACTION_SLTP;
               request.symbol=_Symbol;
               request.volume= OrderLot;
               request.sl=SL;
               request.tp=TakeProfit;
               request.type=ORDER_TYPE_BUY;
               OrderSend(request,result);
              }
           }
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            for(i=0;i<12;i++)
              {
               if(Price[i].high>highest)
                 {
                  highest=Price[i].high;
                 }
              }
            Alert(highest);
            SL=NormalizeDouble(highest+spread+_Point,_Digits);
            if(StopLoss>SL)
              {
               request.action=TRADE_ACTION_SLTP;
               request.symbol=_Symbol;
               request.volume= OrderLot;
               request.sl=SL;
               request.tp=TakeProfit;
               request.type=ORDER_TYPE_SELL;
               OrderSend(request,result);
              }
           }
        }
     }
  }

Ich habe die Warnungen Orders_Total=2 lowest und highest eingefügt, die ebenfalls angemessene Werte liefern, dennoch bleibt der Experte in dieser Schleife hängen und gibt eine unendliche Anzahl von Warnungen aus, es werden keine anderen Fehler (bezüglich der Auftragsänderung) ausgegeben.

Bitte helfen Sie einem Neuling zu verstehen :)

 

Bei einem äußeren Zyklus und zwei inneren Zyklen wird die gleiche Zyklusvariable i, die bei jeder neuen Iteration des äußeren Zyklus 12 wird

 
stringo:

Bei einem äußeren Zyklus und zwei inneren Zyklen wird die gleiche Zyklusvariable i, die bei jeder neuen Iteration des äußeren Zyklus 12 wird

Ich danke Ihnen!!!
 

Können Sie den Code korrigieren? Ich brauche den Eröffnungskurs des aktuellen Balkens. Ich danke Ihnen im Voraus.

double Open[], val4;
ArraySetAsSeries(Open,true);
CopyOpen(Symbol_, PERIOD_M15,1,0,Open);
val4 = (Open[ArrayMinimum(Open,0,1)] );

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
 
abeiks:

Können Sie den Code korrigieren? Ich brauche den Eröffnungskurs des aktuellen Balkens. Ich danke Ihnen im Voraus.

"Symbol_" ist der falsche Parameter, der Unterstrich sollte vorne stehen

Und die Anzahl der kopierten Artikel ist 0.

 

Wenn ich einen externen Indikator mit einem EA über iCustom verbinde, kann ich die Eingabeparameter nicht dynamisch ändern. iMA ist in Ordnung, es funktioniert mit festen Werten, zwei austauschbaren Strings, ich setze sie in OnTick(), MA-Periode wird neu berechnet.

ma_handle = iCustom(_Symbol,0,"Examples\\JJMA.ex5",MA,4);
   
ma_handle = iMA(_Symbol,0, MA,0, MODE_EMA, PRICE_CLOSE); 

Wenn dies der Fall ist, was nicht in externen geändert werden kann, warum muss ich dann Code in meinen EA einbetten?

Tut mir leid, es funktioniert, es dauert nur viel länger.

 
Karlson:

Wenn ich einen externen Indikator mit einem EA über iCustom verbinde, kann ich die Eingabeparameter nicht dynamisch ändern. iMA ist in Ordnung, es funktioniert mit festen Werten, zwei austauschbaren Strings, ich setze sie in OnTick(), MA-Periode wird neu berechnet.

Wenn dies der Fall ist, was nicht im EA geändert werden kann, wie können wir dann den Code in den EA einbetten?

"...ich kann die Eingabeparameter" des Indikators nicht dynamisch ändern?

Reproduzieren Sie die Eingabeparameter des Indikators als Eingabeparameter des Expert Advisors. Und es ist besser, den Handle einmal bei der Initialisierung des Expert Advisors abzurufen, als bei jedem neuen Tick.

 
Yedelkin:

"...kann die Eingabeparameter" des Indikators nicht dynamisch ändern?

Reproduzieren Sie die Eingabeparameter des Indikators als Eingabeparameter des Expert Advisors. Und es ist besser, den Griff einmal bei der Initialisierung des Expert Advisors zu erhalten als bei jedem neuen Tick.

Ich habe eine Periode des Durchschnitts variiert von ATR während der Arbeit des EA, so dass der Griff des Durchschnitts ist in OnTick() platziert. In der Tat ist der Eingangsparameter für die EA der Zeitraum von ATR, es ändert sich nicht.

int OnInit()
  {
  atr_handle = iATR(_Symbol,0, ATR);  //инициализируем хэндл ATR
  }

void OnTick()
  {
     CopyBuffer(atr_handle,0,0,5,atr);   //заполняем массив ATR
     ArraySetAsSeries(atr,true);

     MA=(int)(atr[1]*kMA);                 //рассчитываем период требуемый для средней от ATR

   //ma_handle = iCustom(_Symbol,0,"Examples\\JJMA.ex5",MA,4);  // получаем хэндл средней
   
     ma_handle = iMA(_Symbol,0, MA,0, MODE_EMA, PRICE_CLOSE);

     CopyBuffer(ma_handle,0,0,5,ma);     //заполняем массив средней
     ArraySetAsSeries(ma,true); 
  }
 
Karlson:

Ich habe eine durchschnittliche Periode, die sich von ATR ändert, während der EA läuft, so dass das Handle des Durchschnitts in OnTick() platziert wird.Tatsächlich ist der Eingabeparameter des EA die ATR-Periode.Es ändert sich nicht.ATR in OnInit().

Ich habe es ungefähr verstanden. Es ist jedoch schwierig, den Indikatorgriff jedes Mal bei einem neuen Tick zu erhalten. Und was machen Sie mit dem vorherigen Griff?