Скачать MetaTrader 5

Как MetaTrader 5 считает прибыль?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Запустили испанскую и португальскую версии сайта. Оцени сам!
Dimitar Manov
2751
Dimitar Manov 2012.03.18 13:21 

Запускаем простой  скрипт:

//+------------------------------------------------------------------+
//|                                                       profit.mq5 |
//+------------------------------------------------------------------+
string com;
string Sy[28]={"EURGBP","EURAUD","EURNZD","EURUSD","EURCAD","EURCHF","EURJPY","GBPAUD","GBPNZD","GBPUSD",
              "GBPCAD","GBPCHF","GBPJPY","AUDNZD","AUDUSD","AUDCAD","AUDCHF","AUDJPY","NZDUSD","NZDCAD",
              "NZDCHF","NZDJPY","USDCAD","USDCHF","USDJPY","CADCHF","CADJPY","CHFJPY"};
double a[28],b[28],BuyPlus[28],BuyMinus[28],SellPlus[28],SellMinus[28];
double diff=0.001;

void OnStart()
  {com="";
   for(int i=0;i<28;i++)
      {b[i]=SymbolInfoDouble(Sy[i],SYMBOL_BID);a[i]=SymbolInfoDouble(Sy[i],SYMBOL_ASK);
       OrderCalcProfit(ORDER_TYPE_BUY,Sy[i],1.0,a[i],a[i]+diff,BuyPlus[i]);
       OrderCalcProfit(ORDER_TYPE_BUY,Sy[i],1.0,a[i],a[i]-diff,BuyMinus[i]);
       OrderCalcProfit(ORDER_TYPE_SELL,Sy[i],1.0,b[i],b[i]+diff,SellPlus[i]);
       OrderCalcProfit(ORDER_TYPE_SELL,Sy[i],1.0,b[i],b[i]-diff,SellMinus[i]);
       
       com=com+"\n"+Sy[i]+"  BuyPlus="  +DoubleToString(BuyPlus[i],4)
                         +"  BuyMinus=" +DoubleToString(BuyMinus[i],4)
                         +"  SellPlus=" +DoubleToString(SellPlus[i],4)
                         +"  SellMinus="+DoubleToString(SellMinus[i],4);
      }//for
   Comment(com);
  }//start

 Ошибка ясно забележимая...

Проблем наверно  произходит из  SYMBOL_TRADE_TICK_VALUE_PROFIT  и  SYMBOL_TRADE_TICK_VALUE_LOSS.

Надо будеть     SYMBOL_TRADE_TICK_VALUE_LONG    и   SYMBOL_TRADE_TICK_VALUE_SHORT.

Поиск показал что-то интересно:

 

Renat:

Я вчера, когда смотрел код, неверно выразился по поводу разной стоимость пункта в зависимости от направления.

Точнее сказать, что TickValue при конвертации в целевую валюту зависит от того, убыточна она или нет. То есть, если мы получили убыток в 1 пипс, то нам надо его выкупить по цене Ask, а если прибыль в 1 пипс, то продать по цене Bid.


 

 Ето неправильно, конечно. Для шорт-позиции цени наоборот....

 

Я очень надеюс, что ошибка неволная!  Поправите, пожалуйста! 

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
MetaQuotes
Админ
24944
Renat Fatkhullin 2012.03.18 17:42  

К сожалению, вопрос не заявлен четко и нет вывода из предложенного примера. Не понятно - что именно указано как ошибка.

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

Например, укажите, где тут ошибка:

EURGBP  BuyPlus=158.40000000  BuyMinus=-158.48000000  SellPlus=-158.48000000  SellMinus=158.40000000  Profit=1.58398000  Loss=1.58482000

Я добавил значения SYMBOL_TRADE_TICK_VALUE_PROFIT и SYMBOL_TRADE_TICK_VALUE_LOSS в конце.

Видно, что в профите на самом деле учитывается разная стоимость тика в зависимости от прибыльности или убыточности сделки. Это потому, что есть неявная операция конвертации в валюту депозита, когда нужно полученный финансовый результат в одной валюте продать (если это прибыль) или выкупить (если убыток) для конвертации.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
Dimitar Manov
2751
Dimitar Manov 2012.03.18 18:20  

 

 

 Стоимость тика не зависит от прибыльности или убыточности сделки.

Прибыль и убыток закроятся по една и тоже цена. При конвертация - тоже. 

Только шорт и лонг сделки можно имеет разница в стоимость тика и можно считается  по разному для конвертации в валюту депозита.  

В предний пример BuyPlus и BuyMinus надо будет равни. SellPlus и SellMinus - тоже.    Можно только Buy.... различается с  Sell...

Вы что-то путаете  здесь : 

 

Renat:

...  когда нужно полученный финансовый результат в одной валюте продать (если это прибыль) или выкупить (если убыток) для конвертации.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
Dimitar Manov
2751
Dimitar Manov 2012.03.18 18:44  

Когда откроете сделка на EURGBP, а валюта депозита USD, вы практически имеете (примерно) Buy EURUSD и Sell GBPUSD.   (разница объеми не имеет значение, потому-что при закритие они не меняется)

Для откритие: Buy EURUSD по цена Ask(EURUSD)  и для Sell GBPUSD - Bid(GBPUSD).

 

При закритие (если это прибыль, если убыток) у вас  цени едни и тоже:  Bid(EURUSD) и Ask(GBPUSD).

Почему стоимость тика разная  для   прибыль/убыток ?!?!

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о счете - Документация по MQL5
hrenfx
3672
hrenfx 2012.03.18 19:14  

Это результат давнего заблуждения разработчиков:

Renat:

Точнее сказать, что TickValue при конвертации в целевую валюту зависит от того, убыточна она или нет. То есть, если мы получили убыток в 1 пипс, то нам надо его выкупить по цене Ask, а если прибыль в 1 пипс, то продать по цене Bid.

MetaQuotes
Админ
24944
Renat Fatkhullin 2012.03.18 19:27  
Manov:

 

 Стоимость тика не зависит от прибыльности или убыточности сделки.

Прибыль и убыток закроятся по една и тоже цена. При конвертация - тоже.

В том то и дело, что зависит.

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

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

hrenfx
3672
hrenfx 2012.03.18 22:47  
Renat:

В том то и дело, что зависит.

На самом деле это спорный вопрос. Логика Рената понятна и кажется даже правильной на первый взгляд:

Совершая операцию по кроссу, вы получаете прибыль в ее базовой валюте. Например, прибыль от торговли по EURGBP измеряется в GBP. Но в MT5 нет понятия мультивалютной прибыли, поэтому GBP-прибыль на лету конвертится в валюту счета. И, казалось бы, при положительной прибыли конвертить ее надо по текущему курсу GBPUSD_Bid, а при отрицательной - GBPUSD_Ask.

Однако, контр-пример:

  1. У вас есть два независимых счета. И вы решили попереливать средства с одного на другой.
  2. На EURGBP вы выставляете внутрь спреда на одном счету BuyLimit. Соответственно, Bid-цена становится вашей.
  3. На другом счете маркет-ордером делаете SELL.
  4. Такой нехитрой операцией вы сами себе продали.
  5. Проходит определенное время, и вы решаете закрыть сделки.
  6. На первом счете выставляете SellLimit внутрь спреда. Теперь вашей ценой становится Ask-цена.
  7. На другом счете маркет-ордером делаете BUY.
  8. Получилось, что вы теперь купили у себя же.
  9. Обе сделки на каждом счету закрыты. Вы покупали и продавали сами себе же.
  10. На одном счету положительная прибыль, на другом отрицательная.
  11. Как думаете, сумма средств на ваших обоих счетах изменилась (не учитывая комиссию брокера)?
  12. По логике Рената - изменилась. Т.к. на одном счету прибыль не будет равна убытку на другом счету. И это несмотря на то, что вы сами себе продавали и покупали.
  13. Правильно ли это?

Речь велась о рыночных условиях - ECN/STP брокер.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
MetaQuotes
Админ
24944
Renat Fatkhullin 2012.03.18 23:12  
hrenfx:

Однако, контр-пример:
  1. Правильно ли это?

Речь велась о рыночных условиях - ECN/STP брокер.

Учтите, что есть еще как минимум две внутренние конверсионные операции с их собственными спредами.
Dimitar Manov
2751
Dimitar Manov 2012.03.18 23:47  
Renat:

В том то и дело, что зависит.

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

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

 Разчет цена Ask/Bid   может бы сложнии, но на самом деле  для всех кроссов  у вас есть 2 сделки:

1. Buy or Sell  SYMBOL_CURRENCY_BASE - ACCOUNT_CURRENCY  по Аск/Бид

2. Buy or Sell  SYMBOL_CURRENCY_PROFIT - ACCOUNT_CURRENCY  по Аск/Бид

Каждая из сделок, если откроили по Bid - закроим по Ask. И наоборот...  

Знак результата не имеет значение для цени закрития, как сейчас на MetaTrader 5  !!

 

 

 

 

Dimitar Manov
2751
Dimitar Manov 2012.03.18 23:57  
hrenfx
3672
hrenfx 2012.03.19 00:27  
Renat:
Учтите, что есть еще как минимум две внутренние конверсионные операции с их собственными спредами.

О каких конверсионных операциях идет речь? Логика же простая, нужно мультивалютную прибыль конвертировать в валюту счета, не более. В случае примера, надо профит в GBP перевести в USD. Не важно положительный профит или отрицательный, но конвертировать надо.

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

Но в случае расчета прибыли, если называть вещи своими именами, вы, специально или случайно, способствуете мошеннической схеме отъема денег у клиентов в пользу брокера, использующего MT5. Поясню, на данный момент брокер получает на MT5 доп. прибыль от торговли всех клиентов, равную (грубо) обороту всех его клиентов по кроссам, умноженную на соответствующий спред мажоров.

Вы реализовали бесплатную схему зарабатывания на спреде, причем на любом. Например, во время новостей, на том же GBPUSD спред может быть очень широким, и если происходит закрытие/открытие у клиентов брокера, то брокер зарабатывает этот огромный спред на ровном месте.

Это минус и отказа от мультивалютной прибыли, потому как мультиприбыль конвертится может по совсем поганым ценам во время новостей. А ведь на самом деле во время ролловера конвертация мультивалютной прибыли происходит вообще по суммарному неттингу всех клиентов. И таких перекосов, как показал выше в контрпримере, произойти ну никак не может.

12345678...11
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий