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

 
Tsaryoff5614:

Добрый день господа программисты!!

Помогите пожалуйста новичку с функцией.

Функция считает общую прибыль по истории.

Проблема в том, что она на одном брокере работает а на другом не хочет работать.

На Герчике работает а на Робофорексе нет. На робофорексе ECN счет.

Не пойму в чем прокол. Вот код:

double lastloss()

{

  int typ = -1,cnt = 0;

  double lastlos = 0;

  for(int i = OrdersHistoryTotal()-1; i>=0; i--)

  {

    if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) 

    {

      if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)

      { 

        if(cnt == 0) typ = OrderType();            

        if(cnt > 0 && OrderType()!= typ) break;    

        lastlos += OrderProfit() + + OrderSwap() + OrderCommission();

        cnt++;                              

      }

    }

  }

   return(lastlos);

}

Интересно, компилятор не ругается на эту строку?

lastlos += OrderProfit() + + OrderSwap() + OrderCommission();

Может быть один + нужно убрать, для корректной работы? 

И зачем вы своп с комиссией к прибыли прибавляете? При том что 
OrderProfit()

может быть и отрицательным...

И о какой общей прибыли идет речь, если вы обрабатываете только 1 или несколько подходящих ордеров, но не все?

Далее:

 if(cnt > 0 && OrderType()!= typ) break;

остановка цикла.

 
MakarFX:

1)На большой скорости или если не по тикам в тестере закроется по первой доступной цене.

2)У тебя идет увеличения лота и при большом лоте 1 пункт может быть больше допустимого уровня.

3)Я не понял что ты хочешь, что надо отслеживать если обнуление после каждой сделки?

3)Я не понял что ты хочешь, что надо отслеживать если обнуление после каждой сделки?

речь идет об отслеживании прибыли /убытка "внутри" каждой сделки, то есть, пока цена "болтается" между стопом и тейком, меняется и сумма прибыли и убытка от текущей сделки. Часто бывает так, что цена заходит в зону прибыли но до тейка не дотягивает- разворачивается и сделка закрывается по стопу. Мне отслеживание  по прибыли и убытку (в деньгах) нужно чтобы можно было вовремя фиксануть,  не смещая стоп и тейк, то есть не ломая заданные параметры тейка и стопа. Это актуально для крупных лотов при включенном мартине.

после того как сделка закрылась - отслеживание прекращается и начинается заново уже для новой сделки.

 
законопослушный гражданин:

3)Я не понял что ты хочешь, что надо отслеживать если обнуление после каждой сделки?

речь идет об отслеживании прибыли /убытка "внутри" каждой сделки, то есть, пока цена "болтается" между стопом и тейком, меняется и сумма прибыли и убытка от текущей сделки. Часто бывает так, что цена заходит в зону прибыли но до тейка не дотягивает- разворачивается и сделка закрывается по стопу. Мне отслеживание  по прибыли и убытку (в деньгах) нужно чтобы можно было вовремя фиксануть,  не смещая стоп и тейк, то есть не ломая заданные параметры тейка и стопа. Это актуально для крупных лотов при включенном мартине.

после того как сделка закрылась - отслеживание прекращается и начинается заново уже для новой сделки.

Тебе достаточно указать параметры прибыли и убытка меньше стоплосс и тейкпрофит, т.е.

если ТейкПрофит стоит 200 пунктов 0,1 лот то прибыль $20, поставь уровень прибыли $15 и сделка закроется раньше

 
Mihail Matkovskij:

И зачем вы своп с комиссией к прибыли прибавляете? При том что 
OrderProfit()

может быть и отрицательным...

Вот за это спасибо, я тоже такую глупость делал  так делаю

 
MakarFX:

Тебе достаточно указать параметры прибыли и убытка меньше стоплосс и тейкпрофит, т.е.

если ТейкПрофит стоит 200 пунктов 0,1 лот то прибыль $20, поставь уровень прибыли $15 и сделка закроется раньше


хорошо, спасибо, я подумаю и погоняю в тестере.

 
Может найдется у кого ссылка на функцию которая подсчитывает прибыль по истории ордеров ??
 
   

Прошу помощи у сообщества...
Как правильно объявить и создать глобальные объекты MQL5?

Если делать так:

int OnInit()
{
   CIsNewBar* NB_M1=new CIsNewBar(_Symbol,PERIOD_M1);  // Эта строка потом будет в цикле для разных символов
}

void OnTick()
{
    if (NB_M1.IsNewBar())  // (1) Если появился новый бар M1
        {....}
    ......
}

то компилятор ругается на строку в OnTick():  'NB_M1' - undeclared identifier, что логично, т.к. в OnInit() создается локальная переменная.

Если перед OnInit() вставить глобальное объявление:

CIsNewBar* NB_M1;

то компилируется без ошибок и эксперт работает. Вроде получается, что объект создается два раза, при глобальном объявлении и в OnInit()...
Но в предупреждениях компилятора есть такое : 

declaration of 'NB_M1' hides global variable -> на строку в OnInit()

see previous declaration of 'NB_M1'

Значит ли это, что в OnInit() создаётся локальная (в пределах функции) переменная, которая скрывает глобальную переменную с таким же именем ?
И если это так, как эту локальную переменную "видит" другая функция  - OnTick() ?


 
MakarFX:

Вот за это спасибо, я тоже такую глупость делал

Макар, раньше ты делал правильно, а теперь хочешь делать глупость…

Вспомни математику за 5, примерно, класс. Сколько будет (-3)-(-7) и сколько будет (-3)+(-7)

На калькуляторе сложно проверить, Excell тебе в помощь.


 
Mihail Matkovskij:
Здравствуйте. Кто знает какую-нибудь библиотеку в свободном доступе на MQL, для записи структур данных в файл и последующей их загрузки? Идеально подошла бы библиотека работающая с форматом json, парсер json и т.п.

Я уже и не знаю как вас послать читать документацию. Если читал и штатная функция не подходит по каким-то причинам, надо было сразу об этом сказать…

 
Alexey Viktorov:

Макар, раньше ты делал правильно, а теперь хочешь делать глупость…

Вспомни математику за 5, примерно, класс. Сколько будет (-3)-(-7) и сколько будет (-3)+(-7)

На калькуляторе сложно проверить, Excell тебе в помощь.


Да, спасибо. Я поспешил с выводами. У меня все правильно)

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