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

 

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


моя попытка

double TExpiration = 5; //Time of expiration
double nWin = 1.00;
double nLoss = 1.00;

if(close[i-TExpiration]>Buffer1[i]&&i>1){nWin=nWin+1;} else{nLoss=nLoss+1;}
if(close[i-TExpiration]<Buffer2[i]&&i>1){nWin=nWin+1;} else{nLoss=nLoss+1;}

ObjectCreate("Name", OBJ_LABEL,0,0,0);// Creating obj.
ObjectSet("Name", OBJPROP_CORNER, 0);    // Reference corner
ObjectSet("Name", OBJPROP_XDISTANCE, 10);// X coordinate
ObjectSet("Name", OBJPROP_YDISTANCE, 15);// Y coordinate
ObjectSetText("Name",Name_of_Indicator,10,"Arial",clrAliceBlue);

ObjectCreate("Win", OBJ_LABEL,0,0,0);// Creating obj.
ObjectSet("Win", OBJPROP_CORNER, 0);    // Reference corner
ObjectSet("Win", OBJPROP_XDISTANCE, 10);// X coordinate
ObjectSet("Win", OBJPROP_YDISTANCE, 30);// Y coordinate
ObjectSetText("Win","Win:"+nWin,10,"Arial",clrAliceBlue);

ObjectCreate("Loss", OBJ_LABEL,0,0,0);// Creating obj.
ObjectSet("Loss", OBJPROP_CORNER, 0);    // Reference corner
ObjectSet("Loss", OBJPROP_XDISTANCE, 10);// X coordinate
ObjectSet("Loss", OBJPROP_YDISTANCE, 45);// Y coordinate
ObjectSetText("Loss","Loss:"+nLoss,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(((nWin-1)/(nWin+nLoss-2)*100),Digits) +"%",10,"Arial",clrAliceBlue);

Я бы хотел что-то подобное

Я бы хотел что-то подобное

 
Renato Jose:

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

Что в твоем понимании тестер?

Renato Jose:

моя попытка

Это просто объекты на графике, а какой функционал?

 
Renato Jose:

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


моя попытка


Я бы хотел что-то подобное

А так?

static double nWin = 1.00;
static double nLoss = 1.00;

if(close[i-TExpiration]>Buffer1[i]&&i>1){nWin+=nWin+1;} else{nLoss+=nLoss+1;}
if(close[i-TExpiration]<Buffer2[i]&&i>1){nWin+=nWin+1;} else{nLoss+=nLoss+1;}

ObjectCreate("Name", OBJ_LABEL,0,0,0);// Creating obj
 
Vitaly Muzichenko:

А так?


большое спасибо за сотрудничество, но бесконечный цикл продолжается, следует что-то более пояснительное, чем я бы хотел


 тестер

 
Renato Jose:


большое спасибо за сотрудничество, но бесконечный цикл продолжается, следует что-то более пояснительное, чем я бы хотел

Нужно правильно составить логическое выражение

Не уверен, но возможно так

static double nWin = 1.00;
static double nLoss = 1.00;

if(close[i-TExpiration]>Buffer1[i]&&i>1){nWin+=nWin+1;} else{nLoss+=nLoss+1;}
if(close[i-TExpiration]<Buffer2[i]&&i>1){nWin-=nWin+1;} else{nLoss-=nLoss+1;}

ObjectCreate("Name", OBJ_LABEL,0,0,0);// Creating obj

Пробуйте сами

 
Vitaly Muzichenko:

Нужно правильно составить логическое выражение

Не уверен, но возможно так

Пробуйте сами

есть проблема, он дает бесконечный цикл, и я не знаю, как ее решить, я хотел бы сохранить историю в счетчике, а затем добавить то, что в настоящее время

 
Renato Jose:

есть проблема, он дает бесконечный цикл, и я не знаю, как ее решить, я хотел бы сохранить историю в счетчике, а затем добавить то, что в настоящее время

Прописать перед началом цикла условие. Я не вижу смысла добавления данных онлайн, это-же тестер, пусть прогоняет все данные что уже есть и на этом успокаивается, ну хотя-бы до закрытия бара

 
Vitaly Muzichenko:

Прописать перед началом цикла условие. Я не вижу смысла добавления данных онлайн, это-же тестер, пусть прогоняет все данные что уже есть и на этом успокаивается, ну хотя-бы до закрытия бара


что-то вроде этого?

Я думаю, это некоторая деталь, которую нужно решить
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;
        }
     }
но где бы я разрезал бесконечный цикл? потому что они добавляют все для победы и бесконечно добавляют в каждом тике все стрелки (буферы), содержащиеся на экране
 
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 == 0) return(rates_total);
     ...
 
Vitaly Muzichenko:

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

Тогда уж так

   if(rates_total == prev_calculated) return(rates_total);

Зачем лишние вычисления ;)

 
Vitaly Muzichenko:

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

Еще раз спасибо, завтра я сделаю еще несколько тестов со всем, что вы мне прошли, и обновлю, если это неправильно или неправильно. еще раз спасибо