Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2115

 
Vitaly Muzichenko #:

Сбором истории никто заниматься не будет - пустое и затратное дело, и к тому-же - не нужное. Но суть не в том.

Сейчас вопрос больше в том, как сделать это:

 

#include <MT4Orders.mqh>
class ProfitRec {
public:
   datetime time;
   double profit;
public:
   ProfitRec(datetime _time,double _profit) {
      time=_time;
      profit=_profit;
   }   
   ~ProfitRec() {
   }
};
ProfitRec *PF[];  // все записи про приход/расход
bool sorted=true; // сортированы/нет
// добавить запись
bool PushProfit(datetime time,double profit) {
   ProfitRec *rec=new ProfitRec(time,profit);
   int i=ArraySize(PF);
   if (ArrayResize(PF,i+1)!=i+1) return false;
   PF[i]=rec;
   if (sorted && i!=0 && PF[i-1].time>PF[i].time) sorted=false;
   return true;
}
// прочесть историю
bool FillPF() {
   for(int pos=OrdersHistoryTotal()-1;pos>=0;pos--) {
      if (!OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY)) {
         Sleep(20);
         if (!OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY)) {
            return false;
         }
      }
      switch(OrderType()) {
         case OP_BUY:
         case OP_SELL:
            PushProfit(OrderCloseTime(),OrderProfit()+OrderSwap()+OrderCommission());
            break;
         case OP_BALANCE:
            PushProfit(OrderOpenTime(),OrderProfit()+OrderSwap()+OrderCommission());
            break;
      }
   }
   return true;
}
// сортировка записей (пузырёк)
void SortPF() {
   int total=ArraySize(PF);
   for(int i=1;i<total;i++) {
      if (PF[i]==NULL) continue;
      for(int j=0;j<i;j++) {
         if (PF[j]==NULL) continue;
         if (PF[j].time>PF[i].time) {
            ProfitRec *tmp=PF[j];PF[j]=PF[i];PF[i]=tmp;
         }
      }
   }
   sorted=true;
}
// очистить/удалить все записи
void ClearPF() {
   for(int i=ArraySize(PF)-1;i>=0;i--) {
      if (PF[i]!=NULL) {
         delete PF[i];
         PF[i]=NULL;
      }
   }
   ArrayRemove(PF,0);
   sorted=true;
}
// -------------------------------------------
// вернуть значения баланса на указанное время
// -------------------------------------------
double GetBalance(datetime time,double b=0) {
   if (!sorted) SortPF();
   double balance=(b==0?AccountInfoDouble(ACCOUNT_BALANCE):b);
   for(int i=ArraySize(PF)-1;i>=0;i--) {
      if (PF[i].time<time) return balance;
      balance-=PF[i].profit;
   }
   return balance;
}

но это не проверялось, это просто иллюстрация того что я пытался донести :-) Цикл в обратную сторону - от современности в глубь истории

и можно сделать оптимизированную ф-цию GetDailyBalance(double &daybalance[]) - балансы про каждый день

 

Что это, как получается?

---

Почему не сходится?


--

Единственное пополнение 10000, убыток -142.27

А на балансе показывает убыток всего в -7.91

--------

Проверил в другом терминале, другой счёт

Всё сходится

--

Билды одинаковы 1370

 
Vitaly Muzichenko #:

Что это, как получается?

---

Почему не сходится?


--

Единственное пополнение 10000, убыток -142.27

А на балансе показывает убыток всего в -7.91

--------

Проверил в другом терминале, другой счёт

Всё сходится

--

Билды одинаковы 1370

в рекламных целях свопы и комиссии не считаются в одном из столбиков. Ну чтобы пользователи не огорчались

 
Maxim Kuznetsov #:

в рекламных целях свопы и комиссии не считаются в одном из столбиков. Ну чтобы пользователи не огорчались

А если серьёзно?

Этож полный треш, куда смотреть?

 
Vitaly Muzichenko #:

А если серьёзно?

Этож полный треш, куда смотреть?

в таблицу терминала смотреть. 

но только когда всё закрыто ;-) или клац-клац мышью и показать прочие столбцы

 
Maxim Kuznetsov #:

в таблицу терминала смотреть. 

но только когда всё закрыто ;-) или клац-клац мышью и показать прочие столбцы

Всё это сделано

--


 
Кто-то имеет опыт работы с TradingView?

Хочу поискать новые идеи на их сайте и не могу найти вкладки на подобии нашей CodoBase
 
Vitaly Muzichenko #:

Всё это сделано

--


давай тогда в деталях по шагам : что с чем, когда не сходится и в чём у них различия..и главное отчего ожидается одинаковым

4 с 5-кой в тестовых прогонах не сходятся, потому что тики/спреды/условия. Даже при работе у одного и того-же брокера, по одинаковым сигналам тоже (торговые условия,задержки,пропуски и скорость реакции разные)

== 

сразу - то что рисуется в таблицах при открытых сделках не всегда соответствует действительности. Там в самом читаемый столбик Экви не плюсуется(не отнимается) комиссия и своп. 

 
Alexandr Sokolov #:
Кто-то имеет опыт работы с TradingView?

Хочу поискать новые идеи на их сайте и не могу найти вкладки на подобии нашей CodoBase

купи и обрящешь :-) 

а серьёзно - там нет такого прямого аналога CodeBase со тьмой ненужного кода ; Другая бизнес-модель которой это ненужно; некоторая коллекция есть, но она небольшая

 
Maxim Kuznetsov #:

давай тогда в деталях по шагам : что с чем, когда не сходится и в чём у них различия..и главное отчего ожидается одинаковым

4 с 5-кой в тестовых прогонах не сходятся, потому что тики/спреды/условия. Даже при работе у одного и того-же брокера, по одинаковым сигналам тоже (торговые условия,задержки,пропуски и скорость реакции разные)

== 

сразу - то что рисуется в таблицах при открытых сделках не всегда соответствует действительности. Там в самом читаемый столбик Экви не плюсуется(не отнимается) комиссия и своп. 

А какие шаги?

Ожидается соответствие, но его нет.

В другом терминале ДЦ - всё чётко, скрин показывал

Причина обращения: