[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 458

 
mamba5:

Durante la prueba de EA obtengo el error 130 - paradas erróneas. En la función NewOrder se deberían pasar las variables externas TakeProfit y StopLoss, y me parece que he hecho todo lo posible para conseguirlo, pero como muestra la impresión se pasan ceros. Entiendo que la razón de este error se encuentra aquí pero no he podido encontrarla todavía. Por favor, ayúdame.

extern int TakeProfit=100;
extern int StopLoss=100;

....................................

NewOrder(OP_BUYSTOP, Lot, TakeProfit, StopLoss);
NewOrder(OP_SELLSTOP, Lot, TakeProfit, StopLoss);

int NewOrder(int Cmd,double Lot,int TakeProfit,int StopLoss)

El problema aquí es que hay variables globales StopLoss y se pasan al procedimiento como parámetros. Es mejor renombrarlas en el procedimiento.

 
fore-x:

Как в mql4 из одного индикатора управлять более чем 8 буферами обмена, существует ли способ обхода данного ограничения?

Ну, как пример, мне нужно построить более 8 индикаторных линий, но из одной программы.

Zhunko:

Líneas de tendencia.

¿Y más detalles? Al menos dame un enlace donde leer?
 
splxgf:

El problema aquí es que hay variables globales de StopLoss y también se pasan al procedimiento como parámetros. Es mejor renombrarlas en el procedimiento.


Tienes razón. Es realmente más lógico. Corregido:

//+----------Функция открытия ордера-----------------------------------+
int NewOrder(int Cmd,double Lot,int TaPr,int StLo)
{
 double TP=0;// тейкпрофит
 double SL=0;// стоплос
 double PR=0;// цена
 while(!IsTradeAllowed())Sleep(100);
 if(TaPr<MarketInfo(Symbol(),MODE_STOPLEVEL))  
    TaPr=MarketInfo(Symbol(),MODE_STOPLEVEL);
 if(StLo<MarketInfo(Symbol(),MODE_STOPLEVEL))  
    StLo=MarketInfo(Symbol(),MODE_STOPLEVEL);
 if(Cmd==OP_BUY)
   {
    PR=NormalizeDouble(Ask, Digits);
    if(TaPr>0)TP=NormalizeDouble(Ask,Digits)+NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)SL=NormalizeDouble(Bid,Digits)-NormalizeDouble(StLo*Point,Digits);
   }
 if(Cmd==OP_SELL)
   {
    PR=NormalizeDouble(Bid, Digits);
    if(TaPr>0)TP=NormalizeDouble(Bid,Digits)-NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)  SL=NormalizeDouble(Ask,Digits)+NormalizeDouble(StLo*Point,Digits);
   }
 Print("TaPr=",TaPr," StLo=",StLo," StopLevel=",MarketInfo(Symbol(),MODE_STOPLEVEL));
 tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE);
 if(tic<0)Print("ошибка открытия ордера:",GetLastError()); Print("Cmd-",Cmd," Lot=",Lot," PR=",PR," SL=",SL," TP=",TP);
return(tic);
}
Pero no sirvió de mucho. TaPr y StLo= 100, pero PR, SL y TP son cero por alguna razón.....
Archivos adjuntos:
 

Hola, pueden ayudarme a escribir una condición para que la orden se abra sólo una vez, en este momento se abre en cada tick

   topOrder=OrderSend(Symbol(),OP_BUYSTOP,1,Hinput,3,Price_high-(height_box/100*sl),Price_high+(height_box/100*tp),"my order #",16384,0,Green);
                     if (topOrder<0)
                        {
                           Print("Верхний ордер ошибка #", GetLastError());
                           return(0);
                        }

Sólo necesito hacer algo para que se vea así: si ya tengo un pedido realizado, no se abrirá otro sin un OrderComment, aún no tengo idea de qué hacer con él

Gracias de antemano

 
fore-x:
¿Qué tal más detalles? Al menos dame un enlace donde leer...
¿Qué enlace? Conecta las barras con las líneas de tendencia. Entonces serás independiente de los topes con sus fallos.
 
artmedia70:
A menos que lo ponga en el gráfico usted mismo, no se reflejará durante el EA. ¿Cómo lo has hecho?
Estoy ejecutando el EA en el probador. Cuando el probador termina, aparece la información de las líneas del indicador.
 
mamba5:


Tienes razón. Así tiene más sentido. Corregido:

Pero no sirvió de mucho. TaPr y StLo= 100, pero PR, SL y TP son cero por alguna razón


  NewOrder(OP_BUYSTOP, Lot, TakeProfit, StopLoss);
  NewOrder(OP_SELLSTOP, Lot, TakeProfit, StopLoss);
if(Cmd==OP_BUY)
   {
    PR=NormalizeDouble(Ask, Digits);
    if(TaPr>0)TP=NormalizeDouble(Ask,Digits)+NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)SL=NormalizeDouble(Bid,Digits)-NormalizeDouble(StLo*Point,Digits);
   }
 if(Cmd==OP_SELL)
   {
    PR=NormalizeDouble(Bid, Digits);
    if(TaPr>0)TP=NormalizeDouble(Bid,Digits)-NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)  SL=NormalizeDouble(Ask,Digits)+NormalizeDouble(StLo*Point,Digits);
   }
 

por favor, aconséjeme cómo calcular las operaciones con pérdidas.

es decir, las operaciones que se cerraron con un stop loss.

y restablecer el contador después de una operación rentable.

Es decir, después de cerrar en Take Profit para poner el contador a cero.

Dígito inicial del contador = 1

int Schetcik = 1;

Todas las operaciones, tanto de compra como de venta, deben contarse.

 
Vinin:



Gracias. ))) No podía ver el error hasta que se comparó claramente
 
belck:

por favor, aconséjeme cómo calcular las operaciones con pérdidas.

es decir, las operaciones que se cerraron con un stop loss.

y restablecer el contador después de una operación rentable.

Es decir, después de cerrar en Take Profit para poner el contador a cero.

Dígito inicial del contador = 1

Todas las operaciones, tanto de compra como de venta, deben contarse.


Cerrar sobre un stop loss no significa que la operación sea perdedora, y viceversa. A no ser, claro está, que los topes y las tomas se hayan fijado en la apertura y no se hayan vuelto a tocar.
Razón de la queja: