Domande da un "manichino" - pagina 51

 

Grazie mille papaklass, ha funzionato, ora cercherò di capire la differenza.

 

Perché Expert Advisor pende da questo pezzo di codice:

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);
              }
           }
        }
     }
  }

Ho inserito gli avvisi Orders_Total=2, il più basso e il più alto danno anche valori adeguati, tuttavia expert si blocca in questo ciclo, dando un numero infinito di avvisi, nessun altro errore (riguardante la modifica dell'ordine) viene dato.

Per favore, aiuta un principiante a capire :)

 

Per un ciclo esterno e due cicli interni, la stessa variabile del ciclo i, che diventa 12 ad ogni nuova iterazione del ciclo esterno

 
stringo:

Per un ciclo esterno e due cicli interni, la stessa variabile del ciclo i, che diventa 12 ad ogni nuova iterazione del ciclo esterno

Grazie!!!
 

Puoi correggere il codice? Ho bisogno del prezzo di apertura della barra corrente. Grazie in anticipo.

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:

Puoi correggere il codice? Ho bisogno del prezzo di apertura della barra corrente. Grazie in anticipo.

"Symbol_ " è il parametro sbagliato, il trattino basso dovrebbe essere davanti

E il numero di elementi copiati è 0.

 

Se collego un indicatore esterno a un EA attraverso iCustom, non posso cambiare i parametri di input dinamicamente. iMA è ok, funziona con valori fissi, due stringhe intercambiabili, lo metto in OnTick(), il periodo MA viene ricalcolato.

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

Se questo è il caso, ciò che non può essere cambiato in quelli esterni, allora perché ho bisogno di incorporare il codice nel mio EA?

Scusa, funziona, solo che ci vuole molto più tempo.

 
Karlson:

Se collego un indicatore esterno a un EA tramite iCustom, non posso cambiare i parametri di input dinamicamente. iMA è ok, funziona con valori fissi, due stringhe intercambiabili, lo metto in OnTick(), il periodo MA viene ricalcolato.

Se questo è il caso, ciò che non può essere cambiato nell'EA, allora come possiamo incorporare il codice nell'EA?

"...non posso cambiare dinamicamente i parametri di ingresso" dell'indicatore?

Riproduci i parametri di ingresso dell'indicatore come parametri di ingresso dell'Expert Advisor. Ed è meglio ottenere l'handle una volta all'inizializzazione dell'Expert Advisor piuttosto che ad ogni nuovo tick.

 
Yedelkin:

"...non può cambiare dinamicamente i parametri di input" dell'indicatore?

Riproduci i parametri di ingresso dell'indicatore come parametri di ingresso dell'Expert Advisor. Ed è meglio ottenere la maniglia una volta all'inizializzazione dell'Expert Advisor che ad ogni nuovo tick.

Ho un periodo della media che varia dall'ATR durante il lavoro dell'EA, quindi il manico della media è posto in OnTick(). Infatti, il parametro di input per l'EA è il periodo di ATR, non cambia.

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:

Ho un periodo medio che cambia da ATR mentre l'EA è in esecuzione, quindi l'handle della media è posto in OnTick().Infatti il parametro di input dell'EA è il periodo ATR.Non cambia ATR in OnInit().

L'ho capito approssimativamente. Ma è difficile ottenere la maniglia dell'indicatore ogni volta su un nuovo tick. E cosa si fa con la maniglia precedente?
Motivazione: