Скальпинг на крипто - подумаем вместе? - страница 3

 
Vitaly Muzichenko:

Ну так всё верно работает, это баг.

А теперь напишите то-же самое, только в советнике, чтобы она начала торговать без всяких Send, чистая торговля OrderCalcMargin, можно даже фиксированным лотом, ну или хотя-бы напишите чтоб она модифицировала ордер, она-же ТОРГОВАЯ

Если торговать не будет, значит она не торговая, у не нужно утверждать обратное, вопреки здравому смыслу!
Похоже, это торговая функция. Отнесена к ним потому, что выполняется на сервере. Проверьте, работает ли она при отключенном интернете. А насчет торговать лишь ей одной - так с помощью одной функции закрытия ордеров тоже мало наторгуешь
 
Vitaly Muzichenko:

Если торговать не будет, значит она не торговая, у не нужно утверждать обратное, вопреки здравому смыслу!

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

 
Andrey Khatimlianskii:

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


Это кто-нибудь проверял?
 
Andrey Khatimlianskii:

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

А эти значит запрашивает информацию с диска С, что нет тормозов интерфейса? Она кстати тоже тогда торговая, если предназначена для управления торговой деятельностью

SymbolInfoInteger(symb,SYMBOL_SPREAD);
 
Vitaly Muzichenko:

А эти значит запрашивает информацию с диска С, что нет тормозов интерфейса?

Нет, не с диска, из памяти. Поэтому не тормозят.


Vitaly Muzichenko:

Она кстати тоже тогда торговая, если предназначена для управления торговой деятельностью

Какая цель? Потренироваться в красноречии или дойти до сути?


Alexey Volchanskiy:
Это кто-нибудь проверял?

По ссылке ответ разработчика. Не верите на слово?

 

https://www.mql5.com/ru/forum/61840

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

OrderCalcMargin() и OrderCalcProfit() формулы расчета

Dimitr Trifonov, 2015.08.04 18:57

Спасибо всем за советы.

После нескольких тестов код выглядит так:

class COrderCalculateMargin{

public: double Result;

public: void COrderCalculateMargin(string symbol,ENUM_ORDER_TYPE orderType,double openPrice,double volume){
   Result=0;
   string currency=AccountInfoString(ACCOUNT_CURRENCY);
   if(StringSubstr(symbol,3,3)==currency)Result=CalcMarginFormula(symbol,openPrice,volume);
   else if(StringSubstr(symbol,0,3)==currency)Result=CalcMarginFormula(symbol,1,volume);
   else{
      string pair=StringSubstr(symbol,0,3)+currency;
      if(orderType==ORDER_TYPE_BUY)Result=CalcMarginFormula(pair,Ask(pair),volume);
      if(orderType==ORDER_TYPE_SELL)Result=CalcMarginFormula(pair,Bid(pair),volume);
      }
   return;
   }

double CalcMarginFormula(string symbol,double openPrice,double volume){
   return NormalizeDouble(openPrice*volume*SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE)/AccountInfoInteger(ACCOUNT_LEVERAGE),0);
   } 
   
};

 Единственная разница выделена желтым цветом. А вот код, который проводил тесты:

   ENUM_ORDER_TYPE orderType=ORDER_TYPE_SELL;
   double price=0.5;
   double lots=1.3;
   
   string symbol[3]={"GBPUSD","USDCAD","EURJPY"};
   
   for(int i=0;i<3;i++){

      double mqlMargin=0;
      if(!OrderCalcMargin(orderType,symbol[i],lots,price,mqlMargin))Print("CompareCalcMargin Error");
      COrderCalculateMargin OrderCalculateMargin(symbol[i],orderType,price,lots);
      
      Print(symbol[i]+" ORDER_TYPE_SELL, price = "+price+", lots = "+lots+"; OrderCalcMargin() = "+(string)mqlMargin+"; COrderCalculateMargin.Result = "+(string)OrderCalculateMargin.Result); 
      }

 Вот результат, оба варианта практически одинаковы:

CompareMargin (GBPUSD,H4)       GBPUSD ORDER_TYPE_BUY, price = 2.5, lots = 1.3; OrderCalcMargin() = 6500; COrderCalculateMargin.Result = 6500
CompareMargin (GBPUSD,H4)       USDCAD ORDER_TYPE_BUY, price = 2.5, lots = 1.3; OrderCalcMargin() = 2600; COrderCalculateMargin.Result = 2600
CompareMargin (GBPUSD,H4)       EURJPY ORDER_TYPE_BUY, price = 2.5, lots = 1.3; OrderCalcMargin() = 2848.56; COrderCalculateMargin.Result = 2848
CompareMargin (GBPUSD,H4)       GBPUSD ORDER_TYPE_SELL, price = 2.5, lots = 1.3; OrderCalcMargin() = 6500; COrderCalculateMargin.Result = 6500
CompareMargin (GBPUSD,H4)       USDCAD ORDER_TYPE_SELL, price = 2.5, lots = 1.3; OrderCalcMargin() = 2600; COrderCalculateMargin.Result = 2600
CompareMargin (GBPUSD,H4)       EURJPY ORDER_TYPE_SELL, price = 2.5, lots = 1.3; OrderCalcMargin() = 2848.51; COrderCalculateMargin.Result = 2849
CompareMargin (GBPUSD,H4)       GBPUSD ORDER_TYPE_SELL, price = 0.5, lots = 1.3; OrderCalcMargin() = 1300; COrderCalculateMargin.Result = 1300
CompareMargin (GBPUSD,H4)       USDCAD ORDER_TYPE_SELL, price = 0.5, lots = 1.3; OrderCalcMargin() = 2600; COrderCalculateMargin.Result = 2600
CompareMargin (GBPUSD,H4)       EURJPY ORDER_TYPE_SELL, price = 0.5, lots = 1.3; OrderCalcMargin() = 2847.1; COrderCalculateMargin.Result = 2847
CompareMargin (GBPUSD,H4)       GBPUSD ORDER_TYPE_SELL, price = 0.5, lots = 1.3; OrderCalcMargin() = 1300; COrderCalculateMargin.Result = 1300
CompareMargin (GBPUSD,H4)       USDCAD ORDER_TYPE_SELL, price = 0.5, lots = 1.3; OrderCalcMargin() = 2600; COrderCalculateMargin.Result = 2600
CompareMargin (GBPUSD,H4)       EURJPY ORDER_TYPE_SELL, price = 0.5, lots = 1.3; OrderCalcMargin() = 2847.42; COrderCalculateMargin.Result = 2847

 Если в случае USDxxx поменять CalcMarginFormula(symbol,1,volume); на CalcMarginFormula(symbol,1/openprice,volume); результаты сильно расходятся

 Почему?


OrderCalcMargin() и OrderCalcProfit() формулы расчета
OrderCalcMargin() и OrderCalcProfit() формулы расчета
  • 2015.07.23
  • www.mql5.com
Эксперты Форекс, торговые роботы и советники: OrderCalcMargin() и OrderCalcProfit() формулы расчета
 

Немного порукоблудствовал на MQDemo, в принципе, можно быстренько сочинить робота на торговле на таком частоколе.

ETHUSD_BTCUSD

 
Andrey Khatimlianskii:

Нет, не с диска, из памяти. Поэтому не тормозят.


Какая цель? Потренироваться в красноречии или дойти до сути?


По ссылке ответ разработчика. Не верите на слово?


А вы переиначило ответ от Slava, он звучал так - "А OrderCalcMargin - вычислительная функция (при расчёте на кроссах либо на отсутствующем в данный момент символе она может запрашивать недостающую информацию с сервера со всеми вытекающими последствиями) "

Это маленькое слово многое меняет.

 
Andrey Khatimlianskii:

Нет, не с диска, из памяти. Поэтому не тормозят.


Какая цель? Потренироваться в красноречии или дойти до сути?


По ссылке ответ разработчика. Не верите на слово?

Перезаписывал 5 раз, но всё-равно скучное.

Думаю дойдём до сути:


 
Alexey Volchanskiy:

Немного порукоблудствовал на MQDemo, в принципе, можно быстренько сочинить робота на торговле на таком частоколе.


Интересно, почему котировки с демки и реала отличаются? И спрэд на реале в 1,5 раза больше.



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