Questions d'un "mannequin - page 51

 

Merci beaucoup papaklass, ça a marché, maintenant je vais essayer de comprendre la différence.

 

Pourquoi le conseiller expert s'accroche à ce morceau de code :

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

J'ai inséré des alertes Orders_Total=2 le plus bas et le plus haut donnent également des valeurs adéquates néanmoins l'expert se bloque dans cette boucle, donnant un nombre infini d'alertes, aucune autre erreur (concernant la modification des ordres) n'est donnée.

Veuillez aider un débutant à comprendre :)

 

Pour un cycle extérieur et deux cycles intérieurs, la même variable de cycle i, qui devient 12 à chaque nouvelle itération du cycle extérieur

 
stringo:

Pour un cycle extérieur et deux cycles intérieurs, la même variable de cycle i, qui devient 12 à chaque nouvelle itération du cycle extérieur

Merci ! !!
 

Pouvez-vous corriger le code ? J'ai besoin du prix d'ouverture de la barre actuelle. Merci d'avance.

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:

Pouvez-vous corriger le code ? J'ai besoin du prix d'ouverture de la barre actuelle. Merci d'avance.

"Symbol_ " n'est pas le bon paramètre, l'underscore doit être au début.

Et le nombre d'éléments copiés est de 0.

 

Si je connecte un indicateur externe à mon EA via iCustom, je ne peux pas changer les paramètres d'entrée dynamiquement. iMA est ok, il fonctionne avec des valeurs fixes, deux chaînes interchangeables, je le mets dans OnTick(), la période MA est recalculée.

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

Si c'est le cas, ce qui ne peut pas être modifié dans les externes, alors pourquoi ai-je besoin d'intégrer un code dans mon EA ?

Désolé, ça marche, mais ça prend beaucoup plus de temps.

 
Karlson:

Si je connecte un indicateur externe à un EA via iCustom, je ne peux pas changer les paramètres d'entrée dynamiquement. iMA est ok, il fonctionne avec des valeurs fixes, deux chaînes interchangeables, je le mets dans OnTick(), la période MA est recalculée.

Si c'est le cas, ce qui ne peut pas être modifié dans l'EA, alors comment pouvons-nous intégrer le code dans l'EA ?

"...je ne peux pas changer dynamiquement les paramètres d'entrée" de l'indicateur?

Reproduire les paramètres d'entrée de l'indicateur comme paramètres d'entrée du Conseiller Expert. Et il est préférable d'obtenir la poignée une fois lors de l'initialisation du conseiller expert plutôt qu'à chaque nouveau tick.

 
Yedelkin:

"...ne peut pas changer dynamiquement les paramètres d'entrée" de l'indicateur?

Reproduire les paramètres d'entrée de l'indicateur comme paramètres d'entrée du Conseiller Expert. Et il est préférable d'obtenir la poignée une fois lors de l'initialisation du conseiller expert plutôt qu'à chaque nouveau tick.

J'ai une période de la moyenne qui varie de l'ATR pendant le travail de l'EA, donc la poignée de la moyenne est placée dans OnTick() . En fait, le paramètre d'entrée de l'EA est la période de l'ATR, elle ne change pas.

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:

J'ai une période moyenne qui change d'ATR pendant que l'EA fonctionne, donc le handle de la moyenne est placé dans OnTick().En fait le paramètre d'entrée de l'EA est la période ATR.Il ne change pas.ATR dans OnInit().

Je l'ai compris approximativement. Mais il est difficile d'obtenir la poignée de l'indicateur à chaque fois sur un nouveau tick. Et que faites-vous de la poignée précédente ?