seria algo asi:, esto no lo he probado, pero es mas o menos una idea:
for (int i = Bars-1; i<6; i--) { if(Buffer1[i]>0 && Buffer1[i]!=EMPTY_VALUE && Close[i-5]>Buffer1[i]) { nVit=nVit+1; } else { nDer=nDer+1; } if(close[i+5]<Buffer2[i]&&i>1) { nVit=nVit+1; } else { nDer=nDer+1; } if(Buffer2[i]>0 && Buffer2[i]!=EMPTY_VALUE && Close[i-5]<Buffer2[i]) { nVit=nVit+1; } else { nDer=nDer+1; } } ObjectCreate("Nome", OBJ_LABEL,0,0,0);// Creating obj. ObjectSet("Nome", OBJPROP_CORNER, 0); // Reference corner ObjectSet("Nome", OBJPROP_XDISTANCE, 10);// X coordinate ObjectSet("Nome", OBJPROP_YDISTANCE, 15);// Y coordinate ObjectSetText("Nome",Nome_do_indicador,10,"Arial",clrAliceBlue); ObjectCreate("Vitórias", OBJ_LABEL,0,0,0);// Creating obj. ObjectSet("Vitórias", OBJPROP_CORNER, 0); // Reference corner ObjectSet("Vitórias", OBJPROP_XDISTANCE, 10);// X coordinate ObjectSet("Vitórias", OBJPROP_YDISTANCE, 30);// Y coordinate ObjectSetText("Vitórias","Vitórias:"+nVit,10,"Arial",clrAliceBlue); ObjectCreate("Derrotas", OBJ_LABEL,0,0,0);// Creating obj. ObjectSet("Derrotas", OBJPROP_CORNER, 0); // Reference corner ObjectSet("Derrotas", OBJPROP_XDISTANCE, 10);// X coordinate ObjectSet("Derrotas", OBJPROP_YDISTANCE, 45);// Y coordinate ObjectSetText("Derrotas","Derrotas:"+nDer,10,"Arial",clrAliceBlue); ObjectCreate("wR", OBJ_LABEL,0,0,0);// Creating obj. ObjectSet("wR", OBJPROP_CORNER, 0); // Reference corner ObjectSet("wR", OBJPROP_XDISTANCE, 10);// X coordinate ObjectSet("wR", OBJPROP_YDISTANCE, 60);// Y coordinate ObjectSetText("wR","WinRate:"+MathRound(nWr)+"%",10,"Arial",clrAliceBlue);
Esto debes de hacerlo una única vez, así que haz una condición para que no se repita en cada tick o hazlo en el OnInit
Es solo una idea, no esta probado,
Espero te oriente mejor
Saludos!!!
seria algo asi:, esto no lo he probado, pero es mas o menos una idea:
Esto debes de hacerlo una única vez, así que haz una condición para que no se repita en cada tick o hazlo en el OnInit
Es solo una idea, no esta probado,
Espero te oriente mejor
Saludos!!!
Miguel, muchas gracias por las aclaraciones, pero creo que lo que necesito es exactamente esto:
"Esto debes de hacerlo una única vez, así que haz una condición para que no se repita en cada tick o hazlo en el OnInit"
hacer que estos números en el pasado se agreguen solo una vez, y los siguientes se agregarán
como se passa aca
https://fxsklad.ru/threads/besplatnyj-tester-dlja-binarnyx-opcionov-novaja-versija.1218/
- www.mql5.com
Miguel, muchas gracias por las aclaraciones, pero creo que lo que necesito es exactamente esto:
"Esto debes de hacerlo una única vez, así que haz una condición para que no se repita en cada tick o hazlo en el OnInit"
hacer que estos números en el pasado se agreguen solo una vez, y los siguientes se agregarán
como se passa aca
https://fxsklad.ru/threads/besplatnyj-tester-dlja-binarnyx-opcionov-novaja-versija.1218/
if(Buffer1[6]>0 && Buffer1[6]!=EMPTY_VALUE && Close[1]>Buffer1[6]) { nVit=nVit+1; } else { nDer=nDer+1; } if(Buffer2[6]>0 && Buffer2[6]!=EMPTY_VALUE && Close[1]<Buffer2[6]) { nVit=nVit+1; } else { nDer=nDer+1; }
Ok, sacalo del "For"
Seria algo asi (el anterior tenia un error tambien)
Recuerda que no lo he probado,
Saludos!!!
Ok, rola do "Para" Seria algo assim (ou antes também tinha um erro) Lembre-se que ainda não tentei, Saudações!
Minha tentativa
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{...
for (int i = limit-1; i>=0; i--)
if (i >= MathMin(50000-1, rates_total-1-50)) continue;
...
static double nVit = 1.00;
static double nDer = 1.00;
if (rates_total == prev_calculated)
{
if(Buffer1[6]>0 && Buffer1[6]!=EMPTY_VALUE && Close[1]>Buffer1[6])
{
nVit=nVit+1;
}
else
{
nDer=nDer+1;
}
if(Buffer2[6]>0 && Buffer2[6]!=EMPTY_VALUE && Close[1]<Buffer2[6])
{
nVit=nVit+1;
}
else
{
nDer=nDer+1;
}
}
ObjectCreate("Nome", OBJ_LABEL,0,0,0);// Creating obj.
ObjectSet("Nome", OBJPROP_CORNER, 0); // Reference corner
ObjectSet("Nome", OBJPROP_XDISTANCE, 10);// X coordinate
ObjectSet("Nome", OBJPROP_YDISTANCE, 15);// Y coordinate
ObjectSetText("Nome",Nome_do_indicador,10,"Arial",clrAliceBlue);
ObjectCreate("Vitórias", OBJ_LABEL,0,0,0);// Creating obj.
ObjectSet("Vitórias", OBJPROP_CORNER, 0); // Reference corner
ObjectSet("Vitórias", OBJPROP_XDISTANCE, 10);// X coordinate
ObjectSet("Vitórias", OBJPROP_YDISTANCE, 30);// Y coordinate
ObjectSetText("Vitórias","Vitórias:"+(nVit-1),10,"Arial",clrAliceBlue);
ObjectCreate("Derrotas", OBJ_LABEL,0,0,0);// Creating obj.
ObjectSet("Derrotas", OBJPROP_CORNER, 0); // Reference corner
ObjectSet("Derrotas", OBJPROP_XDISTANCE, 10);// X coordinate
ObjectSet("Derrotas", OBJPROP_YDISTANCE, 45);// Y coordinate
ObjectSetText("Derrotas","Derrotas:"+(nDer-1),10,"Arial",clrAliceBlue);
ObjectCreate("wR", OBJ_LABEL,0,0,0);// Creating obj.
ObjectSet("wR", OBJPROP_CORNER, 0); // Reference corner
ObjectSet("wR", OBJPROP_XDISTANCE, 10);// X coordinate
ObjectSet("wR", OBJPROP_YDISTANCE, 60);// Y coordinate
ObjectSetText("wR","WinRate:"+NormalizeDouble(((nVit-1)/(nVit+nDer-2)*100),Digits)+"%",10,"Arial",clrAliceBlue);
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
meu resultado :'(
No lo hagas en cada tick (a eso llegas cuando haces la comparacion :
Hazo en cada nueva vela (una sola busqueda de la condicion por vela),
Haz la prueba y quizas tengas mejor resultado
Saludos!!!
@Miguel Antonio Rojas Martinez muchas gracias, con su guía logré hacer que se calcule en el futuro, ahora solo necesito encontrar una manera de agregar al historial.
si me puedes dar más esta ayuda estaría aún más agradecida, si es posible
@Miguel Antonio Rojas Martinez muchas gracias, con su guía logré hacer que se calcule en el futuro, ahora solo necesito encontrar una manera de agregar al historial
si lo haces en un indicador, por ejemplo, lo corres en un backtest y deberia funcionar en el historial
si lo haces en un indicador, por ejemplo, lo corres en un backtest y deberia funcionar en el historial
lo que me gustaría es que se cuente tan pronto como lo adjunte al gráfico sin la necesidad de ejecutar el backtest
if(historical) static double nVit1 = 0.00; static double nDer1 = 0.01; { if(Buffer1[cExpiration+1]>0.000001&&Buffer1[cExpiration+1]<9999999 && Buffer1[cExpiration+1]!=EMPTY_VALUE && Close[1]>Close[cExpiration+1]) nVit1+=0.5; if(Buffer1[cExpiration+1]>0.000001&&Buffer1[cExpiration+1]<9999999 && Buffer1[cExpiration+1]!=EMPTY_VALUE && Close[1]<Close[cExpiration+1]) { nDer1+=0.5; } if(Buffer2[cExpiration+1]>0.000001&&Buffer2[cExpiration+1]<9999999 && Buffer2[cExpiration+1]!=EMPTY_VALUE && Close[1]<Close[cExpiration+1]) { nVit1+=0.5; } if(Buffer2[cExpiration+1]>0.000001&&Buffer2[cExpiration+1]<9999999 && Buffer2[cExpiration+1]!=EMPTY_VALUE && Close[1]>Close[cExpiration+1]) { nDer1+=0.5; } } //BackTester Futuro if (rates_total == prev_calculated) return(rates_total); static double nVit = nVit1; static double nDer = nDer1; { if(Buffer1[cExpiration+1]>0.000001&&Buffer1[cExpiration+1]<9999999 && Buffer1[cExpiration+1]!=EMPTY_VALUE && Close[1]>Close[cExpiration+1]) nVit+=0.5; if(Buffer1[cExpiration+1]>0.000001&&Buffer1[cExpiration+1]<9999999 && Buffer1[cExpiration+1]!=EMPTY_VALUE && Close[1]<Close[cExpiration+1]) { nDer+=0.5; } if(Buffer2[cExpiration+1]>0.000001&&Buffer2[cExpiration+1]<9999999 && Buffer2[cExpiration+1]!=EMPTY_VALUE && Close[1]<Close[cExpiration+1]) { nVit+=0.5; } if(Buffer2[cExpiration+1]>0.000001&&Buffer2[cExpiration+1]<9999999 && Buffer2[cExpiration+1]!=EMPTY_VALUE && Close[1]>Close[cExpiration+1]) { nDer+=0.5; } ObjectCreate("Nome", OBJ_LABEL,0,0,0);// Creating obj. ObjectSet("Nome", OBJPROP_CORNER, 0); // Reference corner ObjectSet("Nome", OBJPROP_XDISTANCE, 10);// X coordinate ObjectSet("Nome", OBJPROP_YDISTANCE, 15);// Y coordinate ObjectSetText("Nome",Nome_do_indicador,10,"Arial",clrAliceBlue); ObjectCreate("Vitórias", OBJ_LABEL,0,0,0);// Creating obj. ObjectSet("Vitórias", OBJPROP_CORNER, 0); // Reference corner ObjectSet("Vitórias", OBJPROP_XDISTANCE, 10);// X coordinate ObjectSet("Vitórias", OBJPROP_YDISTANCE, 30);// Y coordinate ObjectSetText("Vitórias","Vitórias:"+(nVit),10,"Arial",clrAliceBlue); ObjectCreate("Derrotas", OBJ_LABEL,0,0,0);// Creating obj. ObjectSet("Derrotas", OBJPROP_CORNER, 0); // Reference corner ObjectSet("Derrotas", OBJPROP_XDISTANCE, 10);// X coordinate ObjectSet("Derrotas", OBJPROP_YDISTANCE, 45);// Y coordinate ObjectSetText("Derrotas","Derrotas:"+MathRound(nDer),10,"Arial",clrAliceBlue); if((nVit/(nVit+nDer)*100)>0){ ObjectCreate("wR", OBJ_LABEL,0,0,0);// Creating obj. ObjectSet("wR", OBJPROP_CORNER, 0); // Reference corner ObjectSet("wR", OBJPROP_XDISTANCE, 10);// X coordinate ObjectSet("wR", OBJPROP_YDISTANCE, 60);// Y coordinate ObjectSetText("wR","WinRate:"+NormalizeDouble(((nVit)/(nVit+MathRound(nDer))*100),Digits)+"%",10,"Arial",clrAliceBlue); } } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
pero no tiene efecto
cualquier condición a la que agregue if(historical)
Me vuelvo loco
Esto que te pasare, haz que se ejecute una única vez por vela:
for(int i=Bars-1;i<6;i--) { if(Buffer1[ i ]>0 && Buffer1[ i ]!=EMPTY_VALUE && Close[i- 5 ]>Buffer1[6]) { nVit=nVit+1; } else { nDer=nDer+1; } if(Buffer2[ i ]>0 && Buffer2[ i ]!=EMPTY_VALUE && Close[ i-5 ]<Buffer2[6]) { nVit=nVit+1; } else { nDer=nDer+1; } }
Jajjaa, fue lo primero que te recomende hacer y me dijiste que NO, que lo necesitabas en el Backtest
Me vuelvo loco
Esto que te pasare, haz que se ejecute una única vez por vela:
no funcionó, solo 0 en todos los contadores, intenté ponerlo en OnInit() y tampoco funcionó
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int limit = rates_total - prev_calculated; // definindo limit if (MaximoDeBarras>0 && MaximoDeBarras<Bars) limit = MaximoDeBarras; //--- definindo arrays/buffer ArraySetAsSeries(Buffer1,true); ArraySetAsSeries(Buffer2,true); if(prev_calculated<1) {ArrayInitialize(Buffer1, 0); ArrayInitialize(Buffer2, 0);} else limit++; //--- loop principal for (int i = limit-1; i>=0; i--){ ... for(int i=limit-1;i<6;i--) double nVit2 = 0.01; double nDer2 = 0.01; { if(Buffer2[cExpiration+1]>0.000001&&Buffer2[cExpiration+1]<9999999 && Buffer2[cExpiration+1]!=EMPTY_VALUE && Close[1]>Close[cExpiration+1]) { nDer2+=0.5; } if(Buffer1[cExpiration+1]>0.000001&&Buffer1[cExpiration+1]<9999999 && Buffer1[cExpiration+1]!=EMPTY_VALUE && Close[1]>Close[cExpiration+1]) {nVit2+=0.5;} if(Buffer1[cExpiration+1]>0.000001&&Buffer1[cExpiration+1]<9999999 && Buffer1[cExpiration+1]!=EMPTY_VALUE && Close[1]<Close[cExpiration+1]) { nDer2+=0.5; } if(Buffer2[cExpiration+1]>0.000001&&Buffer2[cExpiration+1]<9999999 && Buffer2[cExpiration+1]!=EMPTY_VALUE && Close[1]<Close[cExpiration+1]) { nVit2+=0.5; } ObjectCreate("Nome2", OBJ_LABEL,0,0,0);// Creating obj. ObjectSet("Nome2", OBJPROP_CORNER, 0); // Reference corner ObjectSet("Nome2", OBJPROP_XDISTANCE, 10);// X coordinate ObjectSet("Nome2", OBJPROP_YDISTANCE, 165);// Y coordinate ObjectSetText("Nome2",Nome_do_indicador,10,"Arial",clrAliceBlue); ObjectCreate("Vitórias2", OBJ_LABEL,0,0,0);// Creating obj. ObjectSet("Vitórias2", OBJPROP_CORNER, 0); // Reference corner ObjectSet("Vitórias2", OBJPROP_XDISTANCE, 10);// X coordinate ObjectSet("Vitórias2", OBJPROP_YDISTANCE, 180);// Y coordinate ObjectSetText("Vitórias2","Vitórias:"+(nVit2),10,"Arial",clrAliceBlue); ObjectCreate("Derrotas2", OBJ_LABEL,0,0,0);// Creating obj. ObjectSet("Derrotas2", OBJPROP_CORNER, 0); // Reference corner ObjectSet("Derrotas2", OBJPROP_XDISTANCE, 10);// X coordinate ObjectSet("Derrotas2", OBJPROP_YDISTANCE, 195);// Y coordinate ObjectSetText("Derrotas2","Derrotas:"+MathRound(nDer2),10,"Arial",clrAliceBlue); if((nVit2/(nVit2+nDer2)*100)>0){ ObjectCreate("wR2", OBJ_LABEL,0,0,0);// Creating obj. ObjectSet("wR2", OBJPROP_CORNER, 0); // Reference corner ObjectSet("wR2", OBJPROP_XDISTANCE, 10);// X coordinate ObjectSet("wR2", OBJPROP_YDISTANCE, 210);// Y coordinate ObjectSetText("wR2","WinRate:"+NormalizeDouble(((nVit2)/(nVit2+MathRound(nDer2))*100),Digits)+"%",10,"Arial",clrAliceBlue); } } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
¿Cómo puedo insertar un backtester de búfer como la imagen en mt4 (por ejemplo: si 5 minutos después del búfer 1 es mayor que el inicio, cuente 1 victoria, si no cuente 1 pérdida)? Lo que deseo está en EURAUDM15.PNG Mi intento