Se necesita ayuda - página 2

 
WHRoeder:
No uses el tickvalue por sí mismo https://www.mql5.com/en/forum/133792/page3#512466

No pude entender lo que querías decir,

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

Incluso yo no entendí su punto en el enlace que compartió. En mi código,

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;

¿podrías modificarlo? Así que podría entenderlo mejor.

@RaptorUK Esta vez...

int i,j,k;

and

int i = 0, j, k;

Ambos funcionaron, no hay error. Extraño. Pero aún así lo cambié.

 
¿Dónde puedo encontrar ahora https://docs.mql4.com/indicators/iama?
 
qgmql:
¿Dónde puedo encontrar ahora https://docs.mql4.com/indicators/iama?

No funciona, he enviado un ticket al servicio técnico... mientras tanto...

iMA

Calcula el indicador de Media Móvil y devuelve su valor.

doble iMA(
string symbol, // símbolo
int timeframe, // timeframe
int ma_period, // periodo de promediación MA
int ma_shift, // desplazamiento de la MA
int ma_method, // método de promediación
int applied_price, // precio aplicado
int shift // desplazamiento
);

Parámetros

símbolo

[in] Nombre del símbolo sobre cuyos datos se calculará el indicador. NULL significa el símbolo actual.

timeframe

[in] Marco temporal. Puede ser cualquiera de los valores de la enumeración ENUM_TIMEFRAMES. 0 significa el marco de tiempo del gráfico actual.

ma_period

[in] Periodo de promediación para el cálculo.

ma_shift

[in] Desplazamiento de la MA. El desplazamiento de la línea de indicadores se relaciona con el gráfico por el marco de tiempo.

ma_method

[in] Método de media móvil. Puede ser cualquiera de los valores de la enumeración ENUM_MA_METHOD.

applied_price

[in] Precio aplicado. Puede ser cualquiera de los valores de la enumeración ENUM_APPLIED_PRICE.

desplazamiento

[in] Índice del valor tomado del buffer del indicador (desplazamiento relativo a la barra actual la cantidad dada de períodos atrás).

Valor devuelto

Valor numérico del indicador de Media Móvil.

Ejemplo:

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

 
RaptorUK:

No funciona, he enviado un ticket al servicio de atención al cliente... mientras tanto...

Equipo de apoyo 2014.02.18 08:09
Arreglado. Gracias.


iMA()
 

¿Qué debo usar para la función de inicio de expertos?

void ontick() {
}
return;

//OR...

int start() {
}
return(o);

¿o puedo usar ambos en el nuevo meta editor?

(creo que estoy preguntando sobre una cosa muy básica, pero en realidad tengo cero conocimientos y estoy interesado en aprenderlo).

 
qgmql:

¿Qué debo usar para la función de inicio de expertos?

¿o puedo usar ambos en el nuevo meta editor?

(creo que estoy preguntando sobre una cosa muy básica, pero en realidad tengo cero conocimientos y estoy interesado en aprenderlo).

Puedes usar cualquiera de los dos... pero por compatibilidad futura usa OnTick()
 

Traté de obtener el código para la función "LotsProgression" para mi EA, pero es confuso. ¿Pueden ustedes por favor resaltar el código en la fuente de abajo, que está escrito para la progresión de los lotes? (y por favor también decir que la forma de poner de relieve una parte de la fuente como aquí

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: ¿resaltar el código en la fuente de abajo, que está escrito para la progresión de los lotes? (y por favor, también decir que la forma de poner de relieve una parte de la fuente

  1. En 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";
    se convierte en
     double lots[]

  2. Arregla tu sangría y verás donde se usa lotes[]
    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)
    El operando ==. - Foro MQL4


 
qgmql:

Intentado mucho para conseguir el código para la función "LotsProgression" para mi EA, pero es confuso.


lo que es confuso puede u explicar su problema
 

Creo que con esa #propiedad estricta tendrás que inicializar ese i,j,k a un valor...


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

PipPip...Jimdandy

Razón de la queja: