Besoin d'aide ? - page 2

 
WHRoeder:
N'utilisez pas tickvalue tout seul https://www.mql5.com/en/forum/133792/page3#512466

Incapable de comprendre ce que vous vouliez dire,

pipValue = (MarketInfo(Symbol(),MODE_TICKVALUE))*10;

Même moi, je n'ai pas compris votre point de vue sur le lien que vous avez partagé. Dans mon code,

if (Digits == 5 || Digits == 3)
   {            
      pips2dbl = Point*10; pips2point = 10; pipValue = (MarketInfo(Symbol(),MODE_TICKVALUE))*10;
   } 
   else 
   {    
      pips2dbl = Point;   pips2point = 1; pipValue = (MarketInfo(Symbol(),MODE_TICKVALUE))*1;
   }
   
   Slippage = pips2dbl*MaxSlippage;
   TP = pips2dbl*Limit_TP;
   SL = pips2dbl*Limit_SL;

Pourriez-vous s'il vous plaît le modifier ? Pour que je puisse mieux le comprendre.

@RaptorUK Cette fois...

int i,j,k;

and

int i = 0, j, k;

Les deux ont fonctionné, pas d'erreur. C'est étrange. Mais je l'ai quand même modifié.

 
Où puis-je trouver https://docs.mql4.com/indicators/iama maintenant ????
 
qgmql:
Où puis-je trouver https://docs.mql4.com/indicators/iama maintenant ???

Il est cassé, j'ai soumis un ticket au Service Desk... en attendant...

iMA

Calcule l'indicateur de moyenne mobile et renvoie sa valeur.

double iMA(
string symbole, // symbole
int timeframe, // intervalle de temps
int ma_period, // période de calcul de la moyenne MA
int ma_shift, // décalage MA
int ma_method, // méthode de calcul de la moyenne
int applied_price, // prix appliqué
int shift // décalage
) ;

Paramètres

symbol

[in] Nom du symbole sur les données duquel l'indicateur sera calculé. NULL signifie le symbole actuel.

timeframe

[in] Cadre temporel. Il peut s'agir de l'une des valeurs de l'énumération ENUM_TIMEFRAMES. 0 signifie la période actuelle du graphique.

ma_period

[in] Période de calcul de la moyenne.

ma_shift

[in] Décalage MA. Le décalage de la ligne des indicateurs se rapporte au graphique par période.

ma_method

[in] Méthode de calcul de la moyenne mobile. Il peut s'agir de n'importe quelle valeur de l'énumération ENUM_MA_METHOD.

applied_price

Prix appliqué [in] Prix appliqué. Il peut s'agir de l'une des valeurs de l'énumération ENUM_APPLIED_PRICE.

shift

[in] Index de la valeur prise dans le tampon de l'indicateur (décalage par rapport à la barre actuelle d'un nombre donné de périodes).

Valeur retournée

Valeur numérique de l'indicateur Moving Average.

Exemple :

AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i) ;

 
RaptorUK:

C'est cassé, j'ai soumis un ticket au service desk... en attendant....

Équipe de soutien 2014.02.18 08:09
Corrigé. Merci.


iMA()
 

Que dois-je utiliser pour la fonction"expert to start" ?

void ontick() {
}
return;

//OR...

int start() {
}
return(o);

ou puis-je utiliser les deux dans le nouvel éditeur de méta ?

(je pense que je demande une chose très basique, mais en fait j'ai zéro connaissance et je suis intéressé à l'apprendre).

 
qgmql:

Que dois-je utiliser pour la fonction "expert to start" ?

ou puis-je utiliser les deux dans le nouvel éditeur de méta ?

(je pense que je demande une chose très basique, mais en fait j'ai zéro connaissance et je suis intéressé à l'apprendre).

Vous pouvez utiliser l'un ou l'autre... mais pour une compatibilité future, utilisez OnTick().
 

J'ai beaucoup essayé d'obtenir le code de la fonction "LotsProgression" pour mon EA mais c'est confus. Pouvez-vous mettre en évidence le code dans la source ci-dessous, qui est écrit pour la progression des lots ? (et s'il vous plaît dites aussi que comment mettre en évidence une partie de la source comme ici

extern int expertId = 183547;
extern int TakeProfit=40;
extern int StopLoss=10;
extern int BreakevenStop = 30;

extern bool TimeEntry=true;
extern string StartTime="7:00";
extern string StopTime="17:00";
extern bool PriceEntry=false;
extern double Price=1.5500;
extern bool FirstLong=false;
extern string LotsProgression="0.1;0.1;0.2;0.3;0.4;0.6;0.8;1.1;1.5;2.0;2.7;3.6;4.7;6.2;8.0;10.2;13.0;16.5;20.8;26.3;33.1;41.6;52.2;65.5;82.5;103.9;130.9;165;207.9;262;330.1;416;524.7;661.1";
extern bool RestartNewCycle = true;

extern int    slippage=3;       //slippage for market order processing
extern int    OrderTriesNumber=10; //to repeat sending orders when you receive an error or requote

extern string    EAName="PowerSM"; 

bool buysig,sellsig,cycleended;
int tries,long,short,co,plen,lord,mord,lpos;
double Lot,lots[],tlot,lop,lcp,lsl,ltp;

double lbid = -1;

int counter = 0;

int init() 
{
   int i,j,k;
   string ls;
   while (true) {
        j=StringFind(LotsProgression,";",i);
        if (j>0) {
                ls=StringSubstr(LotsProgression,i,j-i);
                i=j+1;
                k++;
                ArrayResize(lots,k);
                lots[k-1]=StrToDouble(ls);
        } else {
                ls=StringSubstr(LotsProgression,i);
                k++;
                ArrayResize(lots,k);
                lots[k-1]=StrToDouble(ls);
                break;
        }
   }

   plen=ArraySize(lots);
}

void start()  {
   
   //---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
   
   if (lbid == -1) lbid = Bid;

   co=CalculateCurrentOrders();
   if (co > 0) counter = 1;
      
   CheckForSignals();
   CheckForOpen();  
   DoBreakEven(BreakevenStop,0);
   
   lbid = Bid;
}


int CalculateCurrentOrders() {
   int ord; string c;
//----
   for(int i=0;i<OrdersTotal();i++) {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==expertId) {
         ord++;
         if (OrderType()==OP_BUY) {
            mord=1;
            if (OrderClosePrice()-OrderOpenPrice()>BreakevenStop*Point) tlot=MathAbs(tlot); else tlot=-MathAbs(tlot);
         }
         if (OrderType()==OP_SELL) {
            mord=-1;
            if (-OrderClosePrice()+OrderOpenPrice()>BreakevenStop*Point) tlot=MathAbs(tlot); else tlot=-MathAbs(tlot);
         }
         c=StringSubstr(OrderComment(),0,StringFind(OrderComment(),"_",0));
         lpos=StrToInteger(c);
         return(ord);
      }
   }
//---- return orders volume
   return(ord);
}

double GetLastTrade() 
{
   int ord; lord=0;
   string c;
//----
   for(int i=OrdersHistoryTotal()-1;i>=0;i--) 
   {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==expertId) 
      {
         if (OrderType()==OP_BUY) lord=1;
         if (OrderType()==OP_SELL) lord=-1;
         c=StringSubstr(OrderComment(),0,StringFind(OrderComment(),"_",0));
         lpos=StrToInteger(c);
         
         lop = NormalizeDouble(OrderOpenPrice(), Digits);
         lcp = NormalizeDouble(OrderClosePrice(), Digits);
         lsl = NormalizeDouble(OrderStopLoss(), Digits);
         ltp = NormalizeDouble(OrderTakeProfit(), Digits);
         
         if (OrderProfit()>0) 
          return(OrderLots()); 
         else 
          return(-OrderLots());
      }
   }
   return(0);
}

bool IsEntryTime()
{
  datetime tm0 = TimeCurrent();
  datetime tm1 = StrToTime(TimeToStr(tm0, TIME_DATE) + " " + StartTime);
  datetime tm2 = StrToTime(TimeToStr(tm0, TIME_DATE) + " " + StopTime);

  bool isTm = false; 
  if (tm1 <= tm2) 
    isTm = isTm || (tm1 <= tm0 && tm0 < tm2);
  else
    isTm = isTm || (tm1 <= tm0 || tm0 < tm2);
  
  return (isTm);
}

void CheckForSignals() 
{
  buysig = false;
  sellsig = false;
      
        if (co > 0) return;

  if (TimeEntry)
  {
    bool cond = IsEntryTime();
    if (!cond) return;
  }

  if (PriceEntry)
  { 
    cond = ((Bid >= Price && lbid < Price) || (Bid <= Price && lbid > Price));
    if (!cond) return;
  }
        
        double lastlot = GetLastTrade();
        if (lastlot >= 0)
        {
          if (counter > 0)
          {
            if (!RestartNewCycle) return;
          }
        
    if (FirstLong) 
      buysig = true; 
    else 
      sellsig = true;
      
    lpos = 0;
    Lot = lots[0];
        }

        else
        {
    lpos++;

    int BE = 0;
    if (lord > 0 && lcp == lop+BE*Point) lpos--;
    if (lord < 0 && lcp == lop-BE*Point) lpos--;

    Lot = lots[lpos];
    if (lord > 0) 
      sellsig = true;
    else if (lord < 0) 
      buysig = true;
  }
}

void CheckForOpen() {
   int    res,tr,TP;
   //---- sell conditions
   if(sellsig && co==0)  {
           Print("sell open ",Lot," ",lpos);
      res = OpenAtMarket(OP_SELL,Lot,TakeProfit,lpos);
           if (res>0) { tlot=Lot; }
      return;
   }
   //---- buy conditions
   if(buysig && co==0)  {
           Print("buy open ",Lot," ",lpos);
      res = OpenAtMarket(OP_BUY,Lot,TakeProfit,lpos);
           if (res>0) { tlot=Lot; }
      return;
   }
}
  
int OpenAtMarket(int mode,double lot,int TP,int pos) {
   int    res,tr,col;
   double openprice,sl,tp;
   tries=0;
   while (res<=0 && tries<OrderTriesNumber) {
      tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }
      RefreshRates();
      if (mode==OP_SELL) {
         openprice=Bid; 
         if (StopLoss>0) sl=openprice+StopLoss*Point;
         if (TP>0) tp=openprice-TP*Point;
         col=Red;
      } else {
         openprice=Ask;
         if (StopLoss>0) sl=openprice-StopLoss*Point;
         if (TP>0) tp=openprice+TP*Point;
         col=Blue;
      }
      res=OrderSend(Symbol(),mode,lot,openprice,slippage,sl,tp,pos+"_"+EAName+"_"+expertId,expertId,0,col);
      tries++;
   }
   Print("market order:: ",Symbol(),"  ",mode,"  ",lot,"  ",openprice,"  ",sl,"  ",tp,"  ",pos+"_"+EAName+"_"+expertId);
   if (res<=0) Print("error opening order : ",ErrorDescription(GetLastError()));
   return(res);
}


void DoBreakEven(int BP, int BE) {
   bool bres;
   for (int i = 0; i < OrdersTotal(); i++) {
      if ( !OrderSelect (i, SELECT_BY_POS) )  continue;
      if ( OrderSymbol() != Symbol() || OrderMagicNumber() != expertId )  continue;
      if ( OrderType() == OP_BUY ) {
         if (Bid<OrderOpenPrice()+BP*Point) continue;
         if ( OrderOpenPrice()+BE*Point-OrderStopLoss()>Point/10) {
               //Print(BP,"  ",BE," bestop");
               bres=OrderModify (OrderTicket(), OrderOpenPrice(), OrderOpenPrice()+BE*Point, OrderTakeProfit(), 0, Black);
                                   if (!bres) Print("Error Modifying BE BUY order : ",ErrorDescription(GetLastError()));
         }
      }

      if ( OrderType() == OP_SELL ) {
         if (Ask>OrderOpenPrice()-BP*Point) continue;
         if ( OrderStopLoss()-(OrderOpenPrice()-BE*Point)>Point/10) {
               //Print(BP,"  ",BE," bestop");
               bres=OrderModify (OrderTicket(), OrderOpenPrice(), OrderOpenPrice()-BE*Point, OrderTakeProfit(), 0, Gold);
                                   if (!bres) Print("Error Modifying BE SELL order : ",ErrorDescription(GetLastError()));
         }
      }
   }
   return;
}

/*
int FindPos(double ls) {
   for (int i=0; i<plen; i++) {
      if (NormalizeDouble(MathAbs(lots[i]-ls),3)<0.001) return(i);
   }
   return(-1);
}
*/
 
qgmql: mettre en évidence le code dans la source ci-dessous, qui est écrit pour la progression des lots ? (et s'il vous plaît dites aussi comment mettre en évidence une partie de la source)

  1. Dans init
    extern string LotsProgression="0.1;0.1;0.2;0.3;0.4;0.6;0.8;1.1;1.5;2.0;2.7;3.6;4.7;6.2;8.0;10.2;13.0;16.5;20.8;26.3;33.1;41.6;52.2;65.5;82.5;103.9;130.9;165;207.9;262;330.1;416;524.7;661.1";
    devient
     double lots[]

  2. Corrigez votre indentation et vous verrez où lots[] est utilisé.
    double lastlot = GetLastTrade();
    if (lastlot >= 0){
       if (counter > 0){
          if (!RestartNewCycle) return;
       }
    
       if (FirstLong) buysig = true; 
       else           sellsig = true;
    
       lpos = 0;
       Lot = lots[0];
    }
    else{
       lpos++;
    
       int BE = 0;
       if (lord > 0 && lcp == lop+BE*Point) lpos--;
       if (lord < 0 && lcp == lop-BE*Point) lpos--;
    
       Lot = lots[lpos];
       if (lord > 0)        sellsig = true;
       else if (lord < 0)   buysig = true;
    }
    
  3. if (lord > 0 && lcp == lop+BE*Point)
    L'opérande ==. - Forum MQL4


 
qgmql:

J'ai beaucoup essayé d'obtenir le code de la fonction "LotsProgression" pour mon EA mais c'est confus.


Qu'est-ce qui est confus ? Pouvez-vous expliquer votre problème ?
 

Je pense qu'avec cette #propriété stricte vous devrez initialiser ce i,j,k à une valeur...


int i=0,j=0,k=0 ;

PipPip...Jimdandy

Raison: