Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 252

 

> err=StringToInteger((string)err)

esto debería pasar a los anales ;-)

originalmente en err obviamente obtuviste int de GetLastError(). Convierte el código de error en una descripción legible ErrorDescription(err); siempre que #include <stdlib.mqh> esté activado.

pero la forma en que está escrito es un fastidio.

PD/ Y no aprendas a programar con MQL. MQL 4 y 5 son lenguajes de destino para una plataforma concreta.

 

¿Puede decirme si se puede escribir de esta manera. no quiere abrir las transacciones. tal vez el formato de los números calculados es incorrecto? u otros defectos en el código?


double TakeLong(double shp)

{

int CurrentDayRange=0, fiveDayATR=0, take=0;

doble TP_ATR=0;

//////Entradas de giro

doble P, S1, R1, S2, R2, S3, R3;

double LastHigh, LastLow, x;

int barras_contadas = IndicadorContado();

int límite, i;

shp=iHigh(Symbol(),PERIOD_D1,0);


//---- Cálculo del indicador Pivot

if(counted_bars == 0)

{

x = Período();

si(x > 240)

return(-1);

}

if(counted_bars < 0)

return(-1);

limit = (Bares - counted_bars) - 1;

//----

for(i = límite; i >= 0; i--)

{

if(High[i+1] > LastHigh)

LastHigh = High[i+1];

//----

if(Low[i+1] < LastLow)

LastLow=Low[i+1];

if(TimeDay(Time[i]) != TimeDay(Time[i+1])

{

P = (LastHigh + LastLow + Close[i+1]) / 3;

R1 = (2*P) - LastLow;

S1 = (2*P) - LastHigh;

R2 = P + (LastHigh - LastLow);

S2 = P - (LastHigh - LastLow);

R3 = (2*P) + (LastHigh - (2*LastLow));

S3 = (2*P) - ((2* LastHigh) - LastLow);

LastLow = Open[i];

LastHigh = Open[i];

}

}

////ATR cálculo

for (i=1;i<6;i++)

{ if(iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i)>0) FiveDayATR += (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));}

FiveDayATR = NormalizeDouble(FiveDayATR/5,Digits());

CurrentDayRange = (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));

if(FiveDayATR-CurrentDayRange>0) TP_ATR=Ask+FiveDayATR-CurrentDayRange; si no TP_ATR=0;


if (Bid>R1 && TP_ATR==0) take=shp;

else if (Bid<R1 && R1<TP_ATR) take=R1;

si no toma=TP_ATR;

devolver(tomar);

}

 
forexpipsrunner: por favor dime si puedes escribirlo así. no quiere abrir las operaciones

El código sugerido parece un indicador. Las operaciones se abren mediante un Asesor Experto o un script. La llamada a la función OrderSend no está permitida en el indicador. El indicador puede alarmar - inserte la llamada de la función de alerta o el sonido en el lugar apropiado

 
STARIJ:

El código propuesto es similar al indicador. Las operaciones se abren mediante un Asesor Experto o un script. La llamada a la función OrderSend está prohibida en el indicador. El indicador puede señalar - insertar la llamada a la función de alerta o el sonido en el lugar apropiado


Este es el código de definición de TP, que envía el resultado a OrderSend. sin este complejo algoritmo, las operaciones se envían, pero no hay manera de enviarlas. Llamo a la función TP = TakeLong(SHP);

 
forexpipsrunner: este es el código de definición de TP que da el resultado a OrderSend . sin este algoritmo se envían las operaciones, no hay manera con él

Hay muchas formas de depurar, el proceso de encontrar un error cuando se establece que lo hay. La primera es F5 - iniciar la depuración en MetsEditor. 2) usar Alertas para rastrear la ejecución. 3 y 4) emiten información de depuración a las etiquetas de texto y a la función Comentario. Elige la forma más conveniente y depura esta sencilla función - entonces te convertirás en un programador. Un programa con miles de líneas se considera complejo.

 
forexpipsrunner:

No quiere abrir las transacciones. ¿Quizás el formato de los números calculados está mal? o algún otro defecto en el código?


int take=0 - devuelve un entero, ¿no debería ser esta variable un doble?
 
Hola! Quiero hacer un patrón de "riel", pero no puedo averiguar el tamaño del cuerpo de la vela....

Calculo el tamaño del cuerpo de la vela de la siguiente manera:
MathAbs( Close1[i] - Open1[i] ) / Point + 1
MathAbs( Close2[i] - Open2[i] ) / Point + 1

En el código completo se ve así

doubleClose1 = iClose(Symbol(), 0, i);
double Open1 = iOpen(Symbol(), 0, i);
double Close2 = iClose(Symbol(), 0, i+1);
double Open2 = iOpen(Symbol(), 0, i+1);

MathAbs( Close1[i] - Open1[i] ) /Punto + 1
MathAbs( Close2[i] - Open2[i] ) / Punto + 1

if (Close1 < Open1 && Close2 > Open2){
BUY();
}
if (Close1 > Open1 && Close2 < Open2){
SELL();
}

¿Es correcto? ¿Cómo puedo hacer que funcione?
 
sviter-pro:   Hola, quiero hacer un patrón de "riel", pero no puedo averiguar el tamaño del cuerpo de la vela....

¿Lo has probado en la cuenta demo M1? ¿Qué obtienes?

 
STARIJ:

¿Lo has probado en una cuenta demo M1? ¿Cómo está funcionando?

Nada funciona....(((
 
void trailing(string symbol,string comment,int magic,int trail_p)
  {
   if(symbol==NULL) symbol=Symbol();
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==symbol && OrderComment()==comment && OrderMagicNumber()==magic)
           {
            switch(OrderType())
              {
               case OP_BUY:
                  if(OrderOpenPrice()+(trail_p*Point)<Ask && OrderStopLoss()+(trail_p*Point)<Ask)
                    {
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+(trail_p*Point),OrderTakeProfit(),OrderExpiration(),clrNONE))
                       {
                        Print("OrderModify завершилась с ошибкой #",GetLastError());
                       }
                    }
                  break;
               case OP_SELL:
                  if(OrderOpenPrice()-(trail_p*Point)>Bid && OrderStopLoss()-(trail_p*Point)>Bid)
                    {
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()-(trail_p*Point),OrderTakeProfit(),OrderExpiration(),clrNONE))
                       {
                        Print("OrderModify завершилась с ошибкой #",GetLastError());
                       }
                    }
                  break;
              }
           }
        }
        Comment("StopLoss=",OrderStopLoss());
     }
  }

¿Puede decirme por qué la red de arrastre se activa en cada tic?