Проверьте - что я не правильно сделала? - страница 2

 
Natalya Smirnova #:

Так как я пишу для бинарных опционов я сделала чуть иначе:


Так наверное будет верно?

Вот помоему в чем проблема
В терминале по 1 ордеру 2 строки


И по ордеру который выставил советник Профит == 0

 
Natalya Smirnova #:

Вот помоему в чем проблема
В терминале по 1 ордеру 2 строки


И по ордеру который выставил советник Профит == 0

где Вы нашли цену меньше нуля, покажите скрин?

на этом скрине такого нет

 
Alexey Viktorov #:

По всему алгоритму вам уже надавали советов, я не хочу встревать и даже не смотрел ваш код и так-же советы… А вот это

бросилось в глаза. В связи с этим вопрос: разве не проще и более читабельно применить оператор-переключатель switch

Мне кажется так читается и понимается легче. Возможно и работает чуток побыстрей.
Может вместо функции использовать просто массив volume[n] ? 
ЗЫ Хотя если платят за каждую строку кода, то лучше оставить так :))
 
Nikolai Semko #:
Может вместо функции использовать просто массив volume[n] ? 
ЗЫ Хотя если платят за каждую строку кода, то лучше оставить так :))

Может и да… Согласен.

 
Renat Akhtyamov #:

где Вы нашли цену меньше нуля, покажите скрин?

на этом скрине такого нет


Пытаюсь получить OrderProfit() - выдает 0

вот подтверждение нашла профит -0,01 как разберется из той дополнительной строки

 
Alexey Viktorov #:

Может и да… Согласен.

Мне не платят это для себя и саморазвития. После работы интересно позаниматься поиском Грааля
 

В общем не понял про отрицательную цену, нет её по прежнему

считайте общий профит примерно так (выкопировка)

то что Вам пригодится выделил

   for(i=0;i<OrdersHistoryTotal();i++)

   {

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

      {

         if(OrderType()==ORDER_TYPE_BALANCE && OrderCloseTime()>startDate)Withdrawal=Withdrawal+OrderProfit()+OrderCommission()+OrderSwap();

         if((OrderType()==ORDER_TYPE_BUY || OrderType()==ORDER_TYPE_SELL))

         {

            if(OrderCloseTime()>iTime(Symbol(),PERIOD_D1,0))hystCurrDay=hystCurrDay+OrderProfit()+OrderCommission()+OrderSwap();

            if(OrderCloseTime()<iTime(Symbol(),PERIOD_D1,0) && OrderCloseTime()>iTime(Symbol(),PERIOD_D1,1))hystPrevDay=hystPrevDay+OrderProfit()+OrderCommission()+OrderSwap();

         }

      }

   }



 
Natalya Smirnova #:
Мне не платят это для себя и саморазвития. После работы интересно позаниматься поиском Грааля

Не обращайте внимания. Это у нас с Николаем такой междусобойчик образовался…

По сути вашей проблемы: поскольку OrderProfit() на БО не даёт реального значения, вам надо определять положительно\отрицательно закрытый ордер как разницу цены закрытия и цены открытия ордера. Вам об этом уже говорили

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Проверьте - что я не правильно сделала?

Renat Akhtyamov, 2021.12.21 09:27

пока не пойму логики

как так?

bool profit = false;
         if(OrderClosePrice() > 0)
            profit = true;

         bool loss = false;
         if(OrderClosePrice() < 0)
            loss = true;

как цена закрытия ордера может быть меньше нуля?

ордер BUY будет в плюсе, если цена закрытия больше цены открытия

вот условие плюса по покупке (без учета комиссий и свопа):

OrderClosePrice() > OrderOpenPrice()
если наоборот, то это минус

 
Natalya Smirnova #:
Мне не платят это для себя и саморазвития. После работы интересно позаниматься поиском Грааля

Да, Наталья - это был просто мем из серии "Когда платят за строчку кода"

Это такой юмор у программистов


В Вашем случае нет необходимости в функции 

double SelectVolume(int n)

Необходимо просто переменые Volume1 ... Volume10 сформировать изначально в виде массива volume[10]
и потом по индексу n обращаться к его элементам volume[n]. 
Не беспокойтесь - через это проходил почти каждый программист.
Главное, что Вас реально прёт от программирования. Я это чувствую.
Значит - далеко пойдете.

 
Согласен. От программирования реально прет и это очень на долго!!!
Не каждый заканчивает гралей....
Причина обращения: