Тестер бинарных опционов - страница 2

 
Не знаю как, но я думаю, что могу взять цену закрытия буфера, чтобы сравнить ее с ценой закрытия следующей пятой свечи, если у меня будет эта информация, я думаю, что закончу ее завтра
 
Renato Jose:

О конечном результате напишите

 
Renato Jose:

По индексу i, который писали в буфер

Buffer1[i]
close[i]
 
Renato Jose:
Vitaly Muzichenko:

Можно так, работа только на открытии нового бара:

Моя попытка сегодня

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);
  }
//+------------------------------------------------------------------+

мой результат :'(

 
Renato Jose:

Моя попытка сегодня

мой результат :'(

Ограничить, чтобы считало только на открытии новой свечи

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[])
  {
if(rates_total == prev_calculated) return(rates_total);
...

for (int i = limit-1; i>=0; i--)
...

Далее нужно составить правильную логику

 
Здравствуйте, а что за стрелочный индикатор в терминале?
 

во-первых, @Vitaly Muzichenko, большое спасибо за руководство, вы даже представить себе не можете, насколько я благодарен за то, что у вас есть все самое лучшее для вашего путешествия. Я решил это следующим образом:

if (rates_total == prev_calculated) return(rates_total);
static double nVit = 0.00;
static double nDer = 0.01;

{
       if(Buffer1[6]>0.000001&&Buffer1[6]<9999999 && Buffer1[6]!=EMPTY_VALUE && Close[1]>Close[6])

         nVit+=0.5;

       if(Buffer1[6]>0.000001&&Buffer1[6]<9999999 && Buffer1[6]!=EMPTY_VALUE && Close[1]<Close[6])
        {
         nDer+=0.5;
        }
     
       if(Buffer2[6]>0.000001&&Buffer2[6]<9999999 && Buffer2[6]!=EMPTY_VALUE && Close[1]<Close[6])
        {
         nVit+=0.5;
        }
       if(Buffer2[6]>0.000001&&Buffer2[6]<9999999 && Buffer2[6]!=EMPTY_VALUE && Close[1]>Close[6])
        {
         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);
  }
//+------------------------------------------------------------------+

во-вторых, работает только по прибывающим стрелкам, осталось только добавить в прошлую историю, вы много сделали для меня и этого было бы достаточно, но эта помощь была бы чем-то отличным

 

примерно так, но все условия замены if (historical) не действуют

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);
  }
//+------------------------------------------------------------------+
 
Renato Jose:

примерно так, но все условия замены if (historical) не действуют

Необходимо использовать скобки { }

if(historical) {
  ...
}
 
Vitaly Muzichenko:

Необходимо использовать скобки { }

да, но то, что я бы сказал, чтобы символизировать только историческое