Как начать работу с MQL5 - страница 31

 

Новый проект "Туманность Андромеды" уже запущен (версия 1.002).

 
Vladimir Karputov #:

Новый проект "Туманность Андромеды

Как присоединиться к проекту

В MetaEditor в окне "Tools" перейдите на вкладку "Public Projects", в колонке "Name" на проекте "AlligatorAndStochastic" нажмите правой кнопкой мыши и выберите пункт "Join".


Спасибо большое. В конце концов я нашел способ обойти это, сосредоточившись на просадке капитала в качестве переменной. Я очень ценю вашу помощь и без колебаний привлеку вас или любого другого доступного программиста, если вы будете очень заняты, когда это потребуется, для платного проекта, если/когда у меня появится кто-то, кого я не смогу закодировать самостоятельно.

 

Проверьте: разрешено ли использовать 'Close By' на символе или это запрещено?

Код: 'Check SYMBOL_ORDER_MODE.mq5'

Этот скрипт можно модифицировать и оставить только нужные строки.

//+------------------------------------------------------------------+
//|                                      Check SYMBOL_ORDER_MODE.mq5 |
//|                              Copyright © 2021, Vladimir Karputov |
//|                      https://www.mql5.com/en/users/barabashkakvn |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2021, Vladimir Karputov"
#property link      "https://www.mql5.com/en/users/barabashkakvn"
#property version   "1.00"
//---
int symboll_order_types[7]= {SYMBOL_ORDER_MARKET,
                             SYMBOL_ORDER_LIMIT,
                             SYMBOL_ORDER_STOP,
                             SYMBOL_ORDER_STOP_LIMIT,
                             SYMBOL_ORDER_SL,
                             SYMBOL_ORDER_TP,
                             SYMBOL_ORDER_CLOSEBY
                            };
string symboll_order_description[7]= {"Market orders",
                                      "Limit orders",
                                      "Stop orders",
                                      "Stop-limit orders",
                                      "Stop Loss",
                                      "Take Profit",
                                      "Close By operations"
                                     };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for(int i=0; i<7; i++)
     {
      if(IsOrderTypesAllowed(Symbol(),symboll_order_types[i]))
         Print(Symbol()," ",symboll_order_description[i]," allowed");
      else
         Print(Symbol()," ",symboll_order_description[i]," prohibited");
     }
  }
//+------------------------------------------------------------------+
//| Check if a order types is allowed                                |
//+------------------------------------------------------------------+
bool IsOrderTypesAllowed(string symbol,int order_type)
  {
//--- receive the value of the property describing allowed order types
   int symbol_order_mode=(int)SymbolInfoInteger(symbol,SYMBOL_ORDER_MODE);
//--- return 'true' if the order_type is allowed
   return((symbol_order_mode&order_type)==order_type);
  }
//+------------------------------------------------------------------+

Вот пример запуска на двух символах: на одном символе разрешены все типы ордеров,

        EURUSD Market orders allowed
        EURUSD Limit orders allowed
        EURUSD Stop orders allowed
        EURUSD Stop-limit orders allowed
        EURUSD Stop Loss allowed
        EURUSD Take Profit allowed
        EURUSD Close By operations allowed

но на другом "Close By" запрещен:

        EURUSD_closeby Market orders allowed
        EURUSD_closeby Limit orders allowed
        EURUSD_closeby Stop orders allowed
        EURUSD_closeby Stop-limit orders allowed
        EURUSD_closeby Stop Loss allowed
        EURUSD_closeby Take Profit allowed
        EURUSD_closeby Close By operations prohibited
Файлы:
 

подскажите, пожалуйста, как рассчитать комиссию по ордеру с прибылью, чтобы было так

" Прибыль += прибыль + своп + комиссия "

 
diamondiptv # :

если вы, пожалуйста, как рассчитать комиссию за заказ с прибылью, чтобы было так

" Прибыль += прибыль + своп + комиссия "

Пример для позиций:

//+------------------------------------------------------------------+
//| Profit all positions                                             |
//+------------------------------------------------------------------+
double ProfitAllPositions(void)
  {
   double profit=0.0;
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==InpMagic)
            profit+=m_position.Commission()+m_position.Swap()+m_position.Profit();
//---
   return(profit);
  }

Используемый торговый классCPositionInfo

Documentation on MQL5: Standard Library / Trade Classes / CPositionInfo
Documentation on MQL5: Standard Library / Trade Classes / CPositionInfo
  • www.mql5.com
CPositionInfo - Trade Classes - Standard Library - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
Vladimir Karputov #:

Пример для позиций:

Используемый торговый классCPositionInfo

Я использовал этот класс, все в порядке, кроме комиссии

Проверьте, пожалуйста, мой код.

double SymbolProfit()
  {
   double ProfitSymbol = 0.0;
     for(int i=PositionsTotal()-1; i>=0; i--)
        {
         string CurrencySymbol = PositionGetSymbol(i);
      
         if(Symbol() == CurrencySymbol)
           {
            double PosProfit = MyPosition.Profit();
            double PosSwap = MyPosition.Swap();
            double PosCommision = MyPosition.Commission();
         
            ProfitSymbol += PosProfit + PosSwap + PosCommision;
           } 
        }   
   return ProfitSymbol;     
  }

примечание: мой брокер считает комиссию на стороне буксира один при открытии, а другой при закрытии

 
diamondiptv # :

Я использовал этот класс, все в порядке, кроме комиссии

Проверьте, пожалуйста, мой код.

примечание: мой брокер считает комиссию на стороне буксира один при открытии, а другой при закрытии

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

Например, так:

//+------------------------------------------------------------------+
//| Profit for the period                                            |
//+------------------------------------------------------------------+
double ProfitForPeriod(const datetime from_date,const datetime to_date)
  {
   double result=0.0;
//--- request trade history
   HistorySelect(from_date,to_date);
//---
   uint     total=HistoryDealsTotal();
   ulong    ticket=0;
   long     position_id=0;
//--- for all deals
   for(uint i=0; i<total; i++) // for(uint i=0;i<total;i++) => i #0 - 2016, i #1045 - 2017
     {
      //--- try to get deals ticket
      if((ticket=HistoryDealGetTicket(i))>0)
        {
         //--- get deals properties
         long deal_type          =HistoryDealGetInteger(ticket,DEAL_TYPE);
         long deal_entry         =HistoryDealGetInteger(ticket,DEAL_ENTRY);
         long deal_magic         =HistoryDealGetInteger(ticket,DEAL_MAGIC);
         double deal_commission  =HistoryDealGetDouble(ticket,DEAL_COMMISSION);
         double deal_swap        =HistoryDealGetDouble(ticket,DEAL_SWAP);
         double deal_profit      =HistoryDealGetDouble(ticket,DEAL_PROFIT);
         string deal_symbol=HistoryDealGetString(ticket,DEAL_SYMBOL);
         //--- only for current symbol and magic
         if(deal_magic==InpMagic && deal_symbol==m_symbol.Name())
               if(ENUM_DEAL_TYPE(deal_type)==DEAL_TYPE_BUY || ENUM_DEAL_TYPE(deal_type)==DEAL_TYPE_SELL)
                  result+=(deal_commission+deal_swap+deal_profit);
        }
     }
//---
   return(result);
  }
 
Vladimir Karputov #:

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

Например, так:

Я очень ценю вашу помощь спасибо

Я объясню пример и поправьте меня, если я ошибаюсь

Я открыл ордер на EURUSD с 1 лотом первая комиссия при открытии составляет 2.32$ после закрытия та же комиссия 2.32$ так что теперь общая комиссия составляет 4.64$

когда я кодирую подсчет прибыли, я могу сделать комиссию * 2 или нет?

и использовать это

ProfitSymbol += PosProfit + PosSwap + PosCommision*2;

вместо истории

 
diamondiptv # :

Я очень ценю вашу помощь спасибо

Я объясню пример и поправьте меня, если я ошибаюсь

Я открыл ордер на EURUSD с 1 лотом первая комиссия при открытии составляет 2.32$ после закрытия та же комиссия 2.32$ так что теперь общая комиссия составляет 4.64$

когда я кодирую подсчет прибыли, могу ли я сделать комиссию * 2 или нет?

и использовать это

вместо истории

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

 
Vladimir Karputov #:

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

Вот мой пример на скриншоте для GBPUSD, каждая позиция в сумме берет 0.10 при открытии 0.05 и после закрытия еще 0.05
Причина обращения: