Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1564

 

Доброго времени суток!


Помогите, кто может!

Рыл форум, документацию, кодобазу - не нашел

....надо как-то  расчитывать свопы и комиссии

Пробовал  получать через  PositionGetDouble(POSITION_SWAP)  и через   position.Swap()  .... но увы...


Может ли быть такое, что в тестере при прогоне совы этих данных может не быть - и они не выводятся?


Заранее благодарен, люди добрые!

 
YuryNov #:

Доброго времени суток!


Помогите, кто может!

Рыл форум, документацию, кодобазу - не нашел

....надо как-то  расчитывать свопы и комиссии

Пробовал  получать через  PositionGetDouble(POSITION_SWAP)  и через   position.Swap()  .... но увы...


Может ли быть такое, что в тестере при прогоне совы этих данных может не быть - и они не выводятся?


Заранее благодарен, люди добрые!

double amount_positions()
  {
   double resultat=0;
   for(int i=0; i<PositionsTotal(); i++)
     {
      string var_symbol;
      ulong var_magic;
      double var_swap=0,var_profit=0;
      if(PositionGetTicket(i)>0)
        {
         if(!PositionGetString(POSITION_SYMBOL,var_symbol))
           {/*Обработка ошибки*/}
         if(!PositionGetInteger(POSITION_MAGIC,var_magic))
           {/*Обработка ошибки*/}
         if(!PositionGetDouble(POSITION_SWAP,var_swap))
           {/*Обработка ошибки*/}
           if(!PositionGetDouble(POSITION_PROFIT,var_profit))
           {/*Обработка ошибки*/}
         if(var_symbol==_Symbol && var_magic==magic/*ваш magic*/)
           {resultat=var_swap+var_profit;}
        }
     }
   return NormalizeDouble(resultat,_Digits);
  }

Пример включает в себя все открытые позиции, дальше лишь дело техники). Комиссию можно расчитать только на совершонных сделках.

            if(!HistoryDealGetDouble(ticket,DEAL_COMMISSION,var_comission))
              {/*Обработка ошибки*/}
 
Столкнулся с проблемой, что в тестере стратегий позиции открываются мгновенно (даже с установленной задержкой), а на реальном счете каждая позиция открывается через 400мс +-. Я делю одну позицию на несколько, потому что в МТ нельзя открывать много больше 10к, а в крипте этого мало. Кто-нибудь сталкивался с такой проблемой и как ее решить? Вот чем я открываю позы
 if  (условие)
         
          for  ( counter =  0 ; counter < iq; counter++)
         
         trader.Buy(); 

Я прикрепил фото со ссылкой, потому что другого пути нет.


 

Доброго дня!

Большое спасибо за ответ!


Вот код


   int pos                    = PositionsTotal();
    double swap           = 0.0,
              profit           = 0.0;
    for(int i = 0; i < pos; i++)
     {
      if(PositionGetSymbol(i) == _Symbol && (PositionGetInteger(POSITION_MAGIC) == InpMagic))
       {
        PositionGetDouble(POSITION_PROFIT, profit);
        ResetLastError();
        if(!PositionGetDouble(POSITION_SWAP, swap))
        {                
            Print(__FUNCTION__,"....ERROR  swap. ",GetLastError());
            return;
        }
       }
     }


....и увы, не выводит своп и в ошибку не входит. 

...профит выводит


может это с данными истрическими брокера связано,  ...rannforex , если что ....

 
...или что-то не так?
 

упс...

ошибка новичка...при расчете в ОнТик - не считалось, вывел в отдельную функцию - считает...


еще раз спасибо!

 

Помогите понять логику МТ5. Выбираю ордера в истории:

 //--- запросить всю историю 
   HistorySelect(0,TimeCurrent()); 
//--- переменные для получения значений из свойств ордера 
   ulong    ticket; 
   double   open_price; 
   double   initial_volume; 
   datetime time_setup; 
   datetime time_done; 
   string   symbol; 
   long   type; 
   long     order_magic; 
   long     positionID; 
//--- количество текущих отложенных ордеров 
   uint     total=HistoryOrdersTotal(); 
   Print("всего ордеров в истории", total);
//--- пройдем в цикле по всем ордерам 
   for(uint i=0;i<total;i++) 
     { 
      //--- получим тикет ордера по его позиции в списке 
      if((ticket=HistoryOrderGetTicket(i))>0) 
        { 
         //--- получим свойства ордера 
         open_price=       HistoryOrderGetDouble(ticket,ORDER_PRICE_OPEN); 
         time_setup=       (datetime)HistoryOrderGetInteger(ticket,ORDER_TIME_SETUP); 
         time_done=        (datetime)HistoryOrderGetInteger(ticket,ORDER_TIME_DONE); 
         symbol=           HistoryOrderGetString(ticket,ORDER_SYMBOL); 
         order_magic=      HistoryOrderGetInteger(ticket,ORDER_MAGIC); 
         positionID =      HistoryOrderGetInteger(ticket,ORDER_POSITION_ID); 
         initial_volume=   HistoryOrderGetDouble(ticket,ORDER_VOLUME_INITIAL); 
         type=             HistoryOrderGetInteger(ticket,ORDER_TYPE); 
         //--- подготовим и выведм информацию об ордере 
         printf("#ticket %d %s %G %s at %G was set up at %s => done at %s, pos ID=%d", 
                ticket,                  // тикет ордера 
                type,                    // тип 
                initial_volume,          // выставленный объем 
                symbol,                  // символ, по которому выставили 
                open_price,              // указанная цена открытия 
                TimeToString(time_setup),// время установки ордера 
                TimeToString(time_done), // время исполнения илм удаления 
                positionID               // ID позиции, в которую влилась сделка по ордеру 
                ); 
        } 
     } 

получаю:

GR 0 20:16:50.551 HAVAL (XAUUSD,M5) всего ордеров в истории19

DI 0 20:16:50.551 HAVAL (XAUUSD,M5) #ticket 1225250047 (non-string passed) 0.1 XAUUSD at 0 was set up at 2024.10.08 19:19 => done at 2024.10.08 19:19, pos ID=1225250047

HR 0 20:16:50.551 HAVAL (XAUUSD,M5) #ticket 1225250049 (non-string passed) 0.1 XAUUSD at 0 was set up at 2024.10.08 19:19 => done at 2024.10.08 19:19, pos ID=1225250049

NL 0 20:16:50.551 HAVAL (XAUUSD,M5) #ticket 1225250054 (non-string passed) 0.1 XAUUSD at 0 was set up at 2024.10.08 19:19 => done at 2024.10.08 19:19, pos ID=1225250047

FI 0 20:16:50.551 HAVAL (XAUUSD,M5) #ticket 1225250146 (non-string passed) 0.1 XAUUSD at 0 was set up at 2024.10.08 19:21 => done at 2024.10.08 19:21, pos ID=1225250049

DR 0 20:16:50.551 HAVAL (XAUUSD,M5) #ticket 1225250188 (non-string passed) 0.1 XAUUSD at 0 was set up at 2024.10.08 19:23 => done at 2024.10.08 19:23, pos ID=1225250188

HL 0 20:16:50.551 HAVAL (XAUUSD,M5) #ticket 1225250221 (non-string passed) 0.01 XAUUSD at 0 was set up at 2024.10.08 19:25 => done at 2024.10.08 19:25, pos ID=1225250221

RK 0 20:16:50.552 HAVAL (XAUUSD,M5) #ticket 1225250237 (non-string passed) 0.01 XAUUSD at 2614.83 was set up at 2024.10.08 19:26 => done at 2024.10.08 19:26, pos ID=1225250221

QP 0 20:16:50.552 HAVAL (XAUUSD,M5) #ticket 1225250806 (non-string passed) 0.01 XAUUSD at 0 was set up at 2024.10.08 19:35 => done at 2024.10.08 19:35, pos ID=1225250806

JO 0 20:16:50.552 HAVAL (XAUUSD,M5) #ticket 1225251596 (non-string passed) 0.02 XAUUSD at 0 was set up at 2024.10.08 19:50 => done at 2024.10.08 19:50, pos ID=1225251596

OD 0 20:16:50.552 HAVAL (XAUUSD,M5) #ticket 1225252808 (non-string passed) 0.02 XAUUSD at 2610.16 was set up at 2024.10.08 19:56 => done at 2024.10.08 19:56, pos ID=1225251596

RS 0 20:16:50.552 HAVAL (XAUUSD,M5) #ticket 1225252956 (non-string passed) 0.02 XAUUSD at 0 was set up at 2024.10.08 20:00 => done at 2024.10.08 20:00, pos ID=1225252956

CN 0 20:16:50.552 HAVAL (XAUUSD,M5) #ticket 1225253906 (non-string passed) 0.03 XAUUSD at 0 was set up at 2024.10.08 20:05 => done at 2024.10.08 20:05, pos ID=1225253906

JE 0 20:16:50.552 HAVAL (XAUUSD,M5) #ticket 1225254139 (non-string passed) 0.03 XAUUSD at 2607.03 was set up at 2024.10.08 20:06 => done at 2024.10.08 20:06, pos ID=1225253906

MS 0 20:16:50.552 HAVAL (XAUUSD,M5) #ticket 1225254819 (non-string passed) 0.02 XAUUSD at 2610.26 was set up at 2024.10.08 20:08 => done at 2024.10.08 20:08, pos ID=1225252956

RH 0 20:16:50.552 HAVAL (XAUUSD,M5) #ticket 1225254887 (non-string passed) 0.02 XAUUSD at 0 was set up at 2024.10.08 20:10 => done at 2024.10.08 20:10, pos ID=1225254887

MF 0 20:16:50.552 HAVAL (XAUUSD,M5) #ticket 1225254980 (non-string passed) 0.02 XAUUSD at 2613.27 was set up at 2024.10.08 20:11 => done at 2024.10.08 20:11, pos ID=1225254887

IL 0 20:16:50.552 HAVAL (XAUUSD,M5) #ticket 1225255101 (non-string passed) 0.01 XAUUSD at 2614.17 was set up at 2024.10.08 20:11 => done at 2024.10.08 20:11, pos ID=1225250806

IK 0 20:16:50.552 HAVAL (XAUUSD,M5) #ticket 1225255635 (non-string passed) 0.01 XAUUSD at 0 was set up at 2024.10.08 20:15 => done at 2024.10.08 20:15, pos ID=1225255635

PP 0 20:16:50.552 HAVAL (XAUUSD,M5) #ticket 1225255684 (non-string passed) 0.01 XAUUSD at 2614.26 was set up at 2024.10.08 20:16 => done at 2024.10.08 20:16, pos ID=1225255635


хотя в истории 


Что не так?

 
sportoman #:
Что не так?
В printf() сравните указанные и передаваемые типы параметров
 
Artyom Trishkin #:
В printf() сравните указанные и передаваемые типы параметров

у меня вопрос, почему перебором 19 ордеров в истории, а в терминале  в истории меньше и почему тикеты в истории терминала не совпадают с тикетами в кэше

 
sportoman #:

у меня вопрос, почему перебором 19 ордеров в истории, а в терминале  в истории меньше и почему тикеты в истории терминала не совпадают с тикетами в кэше

uint     total=HistoryDealsTotal();
https://www.mql5.com/ru/docs/trading
Документация по MQL5: Торговые функции
Документация по MQL5: Торговые функции
  • www.mql5.com
Группа функций, предназначенных для управления торговой деятельностью. Перед тем как приступить к изучению торговых функций платформы, необходимо...