[¡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 742

 
artmedia70:

No quiero lidiar con su 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 ordenar 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, ya son las 5 y media de la mañana...


Una vez establecida la orden, las variables que fueron el criterio para la orden deben volver a ponerse a "0",

 
Quién sabe. ¿Cómo puedo obtener la relación del movimiento del indicador (en su escala), por ejemplo el RSI, con la relación de los ticks de la divisa pasada? Por ejemplo, si el RSI pasó de 0 a 50, ¿a cuántos ticks equivale?
 
Infinity:
Quién sabe. ¿Cómo puedo obtener la relación del movimiento del indicador (en su escala), por ejemplo RSI, con la relación de los ticks pasados de la moneda? Por ejemplo, si el RSI pasa de 0 a 50, ¿a cuántos puntos equivaldrá?

Captura el último valor del indicador RSI en una vela cero. Esperamos el siguiente tic. La garrapata ha llegado. Deja que el precio suba exactamente 1 punto. Vea cuánto ha cambiado el RSI. Eso es todo: las probabilidades están en nuestro bolsillo.
 
drknn:

Captura el último valor del indicador RSI en la vela cero. Esperamos el siguiente tic. La garrapata está aquí. Supongamos que el precio ha subido exactamente 1 punto. Vea cuánto ha cambiado el RSI. Eso es todo: el coeficiente está en nuestro bolsillo.

Pero entonces como es posible, por ejemplo, he cogido el coeficiente de 1 punto, el RSI ha pasado en su escala de 50, resulta que ha pasado 50 puntos, pero en realidad era un plano. Y la vela tiene 2 puntos. Entonces, ¿cómo determinar en este caso
 
cyclik33:

Querido Anatoly. Muchas gracias por este código. Otra pregunta, ¿cómo hacer que funcione todo el tiempo pero que sólo se haga 1 trato por barra?

Boris, es incluso más simple que eso. Deja caer esta línea:

datetime new;

En la parte superior del código (por separado, no en ninguna función).
Y luego, en aquellos lugares en los que hay una llamada a la función OrderSend(...), basta con encerrarla en un abrazo adicional del operador if

if(new != Time[0]){
   new = Time[0];
   // здесь функция OrderSend(...);
}

Ahora, antes de abrir otra posición, comprobará si la barra actual contiene alguna operación o no. Si lo hubiera, la barra actual se almacenará en la variable new y si la barra actual es la misma que la almacenada, la operación no se abrirá. En consecuencia, si la barra es nueva, entonces su hora de apertura no coincidirá con los datos de la variable new, el trato se abrirá y la variable new obtendrá un nuevo valor.

No sé exactamente la arquitectura de su Asesor Experto, pero este método debería funcionar en la mayoría de los casos.

 
FoxUA:

Una vez que la orden ha sido establecida, las variables que fueron el criterio para colocar la orden deben ser puestas a "0" nuevamente,


Intenté compilar tu código y generó errores.
Para utilizar las variables que se utilizaron como criterio para realizar un pedido en dos métodos(start() y NewOrder1()), hay que declararlas fuera de todas las funciones:

bool b,s, //соответственно бай или селл  
bs,// если закрытие по стоплоссу ордера бай
ss,// если закрытие по стоплоссу ордера sell
bt,
st;//      то же по ТП
double bl,sl; // лоты соответсвенно для бай и селл
entonces en el bucle for
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

Deben asignarse los valores necesarios, y después de que la orden se abra con éxito en la función NewOrder1(), deben ponerse a cero allí también.

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());
}else{
b=0;
s=0; 
bs=0;
ss=0;
bt=0;
st=0;
bl=0;
sl=0;
}
//-----------
return(0);}

Algo así.

 
Infinity:

Quién sabe. ¿Cómo se puede obtener la relación del movimiento del indicador (en su escala) por ejemplo RSI, con la relación de los ticks cruzados por la moneda? Para aclarar, si el RSI fue, por ejemplo, de 0 a 50 - cuántas garrapatas será igual.

Una vez tuve un objetivo similar, así que escribí una "regla" como ésta, tal vez también te sirva.

//+------------------------------------------------------------------+
int get_pips_RSI_path(int home_shift, int end_shift){
   double home_index, end_index;
   double home_price, end_price;
   int path;
   
   home_index = iRSI(NULL,0,14,PRICE_CLOSE,home_shift);
   home_price = Close[home_shift];
   end_index = iRSI(NULL,0,14,PRICE_CLOSE,end_shift);
   end_price = Close[end_shift];
   
   if(end_price > home_price)path = (end_price - home_price)/Point; else path = (home_price - end_price)/Point;
   
   Alert("Между значениями RSI ", home_index, " и ", end_index, " было пройденно ", path, " пунктов.");
   return(path);
}
//+------------------------------------------------------------------+

Como parámetros se envían turnos de barras con valores RSI deseados, en respuesta se obtiene la distancia entre ellos en pips.

 
ToLik_SRGV:

Una vez tuve un objetivo similar y escribí una "regla" como ésta, tal vez también te sirva.

Como parámetros se envían los desplazamientos de las barras donde se encuentran los valores de RSI deseados, en respuesta se obtiene la distancia entre ellos en pips.


Gracias, lo comprobaré esta noche

Tengo la fuerte sensación de que la prueba sobre el historial del Asesor Experto no dará un buen resultado debido a lo incompleto del historial de cotizaciones. Entiendo que el historial de cotizaciones se forma archivando el mercado actual (cotizaciones de velas), pero cómo se puede confiar en el resultado, si las cotizaciones reales (al menos en mi caso) están volando, a veces durante 40 minutos sólo sin velas, el gráfico se mantiene, entonces vuela toda la misma vela.

 
ToLik_SRGV:

Tal vez no haya podido encontrar una combinación de parámetros rentable, pruebe a desmarcar la opción "Ignorar resultados inútiles".

Y no olvide marcar las casillas de verificación en la configuración del Asesor Experto para los parámetros que desea optimizar, así como establecer los límites de paso y de optimización.

Gracias, así es, "Saltar resultados inútiles" está marcado.
 
artmedia70:


Amigos, 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 y en la primera barra, es decir, una señal de venta innecesaria (en este caso):


Podemos ver en la imagen que la tendencia se ha movido a un nuevo extremo (la ubicación está marcada con una flecha hacia abajo) y el nivel de precios de la nueva 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... :)



Entiendo que la señal de trading debe producirse cuando la línea del indicador cruza la línea de tendencia, y no al revés, y uas en ambos sentidos. Mantenga los valores anteriores de la posición de la línea de tendencia en las variables estáticas y si no han cambiado, compruebe si hay un cruce, si la línea de tendencia ha cambiado de posición - reinicie...

Razón de la queja: