[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 741

 

Lo tengo en la oficina del experto.

bool b=0,s=0, //соответственно бай или селл  
bs=0,// если закрытие по стоплоссу ордера бай
ss=0,// если закрытие по стоплоссу ордера sell
bt=0,
st=0;//      то же по ТП
double bl=0,sl=0; // лоты соответсвенно для бай и селл


for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
     {
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol()) 
{ if (OrderType() == OP_BUY )  {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1; if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*10; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*10; break;}
            }
         }
      }


}//end

if(bs==1||bl==1)
{   
    NewOrder1(OP_BUYLIMIT,Lot);
    
    Today=TimeDay(TimeCurrent());}
    

int NewOrder1(int Cmd,double Lot)
{double TP=0; //тейкпрофит
double SL=0; //стоплосс
double PR=0; //Цена
double LT=0; //Лот
while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUYLIMIT)
   {PR=Ask-Point*h;
    if(TakeProfit>0) TP=PR+TakeProfit*Point;
    if(StopLoss>0) SL=PR-StopLoss*Point;
    if(Lot>0) LT=3*Lot;}
int tic1=OrderSend(Symbol(),Cmd,LT,PR,3,SL,TP,0,mag,0,CLR_NONE);

if(tic1<0) Print(GetLastError());

return(0);}





 
artmedia70:
Las variables booleanas no se inicializan inicialmente a falso, en general, antes de entrar en el bucle, ponlas a cero (falso) - cuando salgas del bucle, tendrán los valores asignados en el bucle (mejor verdadero que 1) y seguirán teniendo estos valores hasta la siguiente entrada en el bucle. Si la apertura de una orden depende estrictamente de los valores de estas variables, entonces, tras la orden de apertura de una orden, comprueba la presencia de esta posición en el mercado, y si está presente, pone las variables a cero (falso)

y en el código se puede esbozar

 
artmedia70:
Compare el valor del ADX en la barra actual (o preferiblemente la primera barra) con el valor del ADX en la barra anterior (preferiblemente la segunda barra).

Si es directo, es algo así:

Pero no es muy agradable. Es mejor asignar los valores de ADX a variables dobles y trabajar con las variables...






Muchas gracias por su ayuda:)
 

Amigos míos, no sé cómo deshacerme de las señales innecesarias que aparecen cuando la línea de tendencia se invierte. La línea de tendencia (descendente en el ejemplo) se traza desde el extremo más grande hasta el más pequeño, que se encuentra dentro de un intervalo específico de barras. El problema es que en cuanto aparece un nuevo extremo inferior, la línea de tendencia salta a ese extremo (está diseñada así).

Pero, también en la primera barra la línea de tendencia construye niveles con el valor de la línea de tendencia, cuyo cruce por la línea del indicador da una señal. Si la línea del indicador en la primera barra está por debajo de este nivel y en la segunda barra está por encima de este nivel, entonces tenemos un cruce descendente.

Así que... Cuando la línea de tendencia salta a un nuevo extremo inferior, se produce una situación en la que la línea del indicador en la segunda barra está por encima de la línea de tendencia y por debajo del nivel trazado, mientras que en la primera barra está por debajo, es decir, una señal de venta innecesaria (en este caso):


En la imagen se puede ver cómo la línea de tendencia saltó a un nuevo extremo (la ubicación está marcada con una flecha hacia abajo) y el nivel de precios de la nueva línea de tendencia en la primera barra (línea horizontal de guiones rojos)
se volvió más baja que la línea AD en la segunda barra y la línea AD en la primera barra es más baja que el nivel de precios...
En consecuencia, al desplazar la línea de tendencia a un extremo inferior se simuló una señal no deseada... La misma señal innecesaria ocurrió antes -
Lo marqué con una línea vertical azul claro...

De ahí la pregunta: ¿cómo evitar esta situación? Estoy agotado tratando de pensar en algo...
¿Alguna idea? Gracias... :)

 
profitinvesting:
Muchas gracias por su ayuda:)
De nada :)
 
ToLik_SRGV:

Al principio de la función de inicio, añada una línea de llamada a esta función:

El asesor se activará 1 vez, sólo en una nueva barra.

Querido Anatoly. Muchas gracias por este código. Otra pregunta, ¿cómo hacer que funcione todo el tiempo, pero puede hacer sólo 1 acuerdo en una barra?
 
artmedia70:
después de una orden de apertura comprueba si la posición ya está en el mercado y si lo está, reinicia las variables (false)

¿Dime cómo se puede implementar esto en mi pedido?

¿Qué función debo insertar en mis pedidos para ponerlos a cero?

 
FoxUA:

¿Dime cómo se puede implementar esto en mi pedido?

¿Qué función debo insertar en mi pedido para ponerlo a cero?


Simplemente después de comprobar si la orden está en el mercado asigna valores a las variables. Por ejemplo Variable1 = false;
Aquellas variables que haya puesto en "true" en el bucle, que era el criterio para realizar el pedido, deben volver a ponerse en "false" después de realizar el pedido, de lo contrario los pedidos seguirán realizándose por lotes. Por lo tanto, asigne estas variables a sus variables y póngalas en "false".
 
artmedia70:
Después de comprobar si hay una orden en el mercado, sólo hay que asignar valores a las variables. Por ejemplo, Variable1 = false;
Aquellas variables que haya puesto a "true" en el bucle, que era el criterio para realizar el pedido, deben volver a ponerse a "false" después de realizar el pedido. Por lo tanto, debe asignar estas variables a "false".

Debo decir que llevo dos días intentando averiguar qué colocar de lo que has dicho, así que no he entendido nada. Te importaría poner estos valores en el código que he puesto o simplemente escribir una función y decirme exactamente dónde ponerlo, esta es la última parte de mi puzzle y no consigo averiguar dónde y cómo ponerlo.

 
FoxUA:

He de decir que llevo dos días sin dormir y luchando con el Expert Advisor porque no entiendo que poner de lo que has dicho, puedes poner esos valores en el código que he puesto o simplemente escribir la función y decirme donde ponerla exactamente es la última pieza de mi puzzle y no consigo centrarme donde y como ponerla

No quiero meterme con tu código (malvado, pero honesto :)). Dime exactamente lo que quieres conseguir al final y te escribiré la función que necesitas. Honestamente - será más fácil para mí. Debería manejar mi propio código... :)

... O vete a la cama, duérmete, y al día siguiente todos tus rompecabezas encajarán... :) Eso es lo que hago cuando no lo consigo... Por cierto, me voy a la cama, son las cinco y media de la mañana...