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

 
akarustam:

Вот чудеса тестирования программы советника в МТ5 (см. картинку-файл)...Разве может быть положительным еквити при отрицательном балансе ? и когда баланс бывает отрицательным ? Прежде чем обратиться к Торговому Народу передумал много и так и не додумалось пока... Чую выспаться пора)

Если кого заинтересует открытый код и сет сообщите ? - разумеется выставлю. Начал осваивать МТ5 с хеджингом и вот, - чудеса однако)  

Никаких чудес. Есть открытые позиции с большим плюсом, и есть закрытая позиция, с убытком больше размера баланса. Слива нет потому, что средств для поддержания открытых позиций достаточно.
 
Artyom Trishkin:
Никаких чудес. Есть открытые позиции с большим плюсом, и есть закрытая позиция, с убытком больше размера баланса. Слива нет потому, что средств для поддержания открытых позиций достаточно.
Всё таак просто... СПАСИБО !
 

Подскажите, пожалуйста, в чём моя ошибка.

for(int i=0;i<N_Sell;i++) printf("OpenSellTime[%d] = %G",i,TimeToString(OpenSellTime[i],TIME_DATE|TIME_MINUTES)," PriceOpenSell[%d] = %G",i,PriceOpenSell[i]);

Не принтуется дата из массива OpenSellTime и не вторая часть выражения - PriceOpenSell.

И, не могу найти про команды printf типа  %G и %d.

 

Добрый день Всем!)

Такой вопрос чайника в программировании...

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

Вот одна из них

if(oppositedelete){delete(OP_SELLSTOP);delete(OP_SELLLIMIT);}

В этом кусочке кода есть 2 ошибки отмечены красным, '(' - object pointer expected

Почитав немного о сущности ошибки, понял что имя зарезервировано и нужно его заменить...

И вот вопрос на что заменить?

 
Anton Razmyslov:

Добрый день Всем!)

Такой вопрос чайника в программировании...

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

Вот одна из них

if(oppositedelete){delete(OP_SELLSTOP);delete(OP_SELLLIMIT);}

В этом кусочке кода есть 2 ошибки отмечены красным, '(' - object pointer expected

Почитав немного о сущности ошибки, понял что имя зарезервировано и нужно его заменить...

И вот вопрос на что заменить?

На то что сможешь придумать. Например _delete или delete_1294_765_1912 или просто Napoleon
 

Есть такая строка в коде

Print (";OpenSellTime - ",TimeToString(OpenSellTime[N_Sell],TIME_DATE|TIME_MINUTES), ";PriceOpenSell", PriceOpenSell[N_Sell]);

почему на выходе я получаю такой текст:

 OpenSellTime - 2015.12.01 11:15 

 где ";" и вторая часть - "PriceOpenSell"?

 
-Aleks-:

Есть такая строка в коде

Print (";OpenSellTime - ",TimeToString(OpenSellTime[N_Sell],TIME_DATE|TIME_MINUTES), ";PriceOpenSell", PriceOpenSell[N_Sell]);

почему на выходе я получаю такой текст:

 OpenSellTime - 2015.12.01 11:15 

 где ";" и вторая часть - "PriceOpenSell"?

убрал ";" - заработала.

Вопрос про printf остался... 

 

 Как правильно отправить запрос на закрытие позиции встречной?

Если закрывать как раньше, противоположной, она лакируется ))

Уже все перепробовал,  все равно выдает ошибку   2016.04.15 13:17:24 Core 1 2016.03.29 09:00:00   failed close position #64 buy 0.81 EURUSD by position #0 [Invalid request]

Какие поля заполнять, какие нет? Я так понимаю, что не имеет значение короткая позиция открыта или длинная.

//+------------------------------------------------------------------+
//| Закрытие  позиции по типу                                        |
//+------------------------------------------------------------------+
void PositionClose(double lot, int P_type,long id)
  {
Print("Вход в функцию Закрытие  позиции по типу !");
    ZeroMemory(mrequest); ZeroMemory(mresult);            // обнуляем значения mrequest, mresult

   //--- Получить текущее значение котировки в структуру типа MqlTick
   if(!SymbolInfoTick(_Symbol,latest_price))
     {
      Alert("Ошибка получения последних котировок - ошибка:",GetLastError(),"!!");
      return;
     }            
//--- формируем торговый запрос
      mrequest.action = TRADE_ACTION_CLOSE_BY;                                              // закрыть позицию встречной
      mrequest.order = id; 
//      mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
//      mrequest.price =  NormalizeDouble(latest_price.bid,_Digits);                      // последняя цена ask
//    mrequest.sl = 0;               // Stop Loss
//     mrequest.tp = 0;               // Take Profit
      mrequest.symbol = _Symbol;                        // символ
      mrequest.volume = lot;                            // количество лотов для торговли
 //     mrequest.magic = MAGIC;                               // Magic Number
      
//     if (P_type == 0) mrequest.type = ORDER_TYPE_SELL; // проверяем тип позиции
//     if (P_type == 1) mrequest.type = ORDER_TYPE_BUY;     
      mrequest.type = ORDER_TYPE_CLOSE_BY;
      mrequest.type_filling = ORDER_FILLING_FOK;        // тип исполнения ордера - все или ничего
      mrequest.deviation=10;                            // проскальзывание от текущей цены
                                        
            if( OrderSend(mrequest,mresult)>0)            // если значение отосланного ордера не ноль, то 
                  {  if(mresult.retcode==10009 || mresult.retcode==10008)
                     Print(" позиция  закрыта !");
                  } else {
                     Print(ResultRetcodeDescription(mresult.retcode));
                     return;
                         }
  }
 

Здравствуйте! Вопрос по тестеру. 

Тестирую мультивалютный советник и хотел бы видеть в визуализаторе все окна по всем валютным парам, по которым идет торговля.

В справке по визуализатору говорится о некой команде  "График" в разделе "Вид" главного меню визуализатора, с помощью которой вроде бы можно открывать новые графики.  Но у меня почему то команда "График" вообще отсутствует и, соответственно,  я не могу открыть графики по дополнительным парам.  В чем тут проблема ? 

 
Aleksandr Prishenko:

 Как правильно отправить запрос на закрытие позиции встречной?

Если закрывать как раньше, противоположной, она лакируется ))

Уже все перепробовал,  все равно выдает ошибку   2016.04.15 13:17:24 Core 1 2016.03.29 09:00:00   failed close position #64 buy 0.81 EURUSD by position #0 [Invalid request]

Какие поля заполнять, какие нет? Я так понимаю, что не имеет значение короткая позиция открыта или длинная.

Используйте минимум кода - применяйте стандартную библиотеку:

//+------------------------------------------------------------------+
//|                                                       TestEA.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"

#include <Trade\Trade.mqh>

CTrade my_trade;
ulong    result_deal_0  =0;
ulong    result_deal_1  =0;
bool     first_start    =false;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   first_start=false;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!first_start)
     {
      my_trade.Sell(0.01);
      result_deal_0=my_trade.ResultDeal();
      Sleep(1000);

      my_trade.Buy(0.02);
      result_deal_1=my_trade.ResultDeal();
      Sleep(1000);

      if(result_deal_0!=0 && result_deal_1!=0)
         PositionCloseBy(result_deal_0,result_deal_1);

      first_start=true;
     }
  }
//+------------------------------------------------------------------+
//| Position Close By                                                |
//+------------------------------------------------------------------+
void PositionCloseBy(ulong ticket,ulong ticket_by)
  {
   my_trade.PositionCloseBy(result_deal_0,result_deal_1);
  }
//+------------------------------------------------------------------+

 

Журнал агента:

ES      0       09:12:21.189    Trade   2016.04.14 00:00:30   instant sell 0.01 EURUSD at 1.12728 (1.12728 / 1.12736 / 1.12728)
IL      0       09:12:21.189    Trades  2016.04.14 00:00:30   deal #2 sell 0.01 EURUSD at 1.12728 done (based on order #2)
OP      0       09:12:21.189    Trade   2016.04.14 00:00:30   deal performed [#2 sell 0.01 EURUSD at 1.12728]
NF      0       09:12:21.189    Trade   2016.04.14 00:00:30   order performed sell 0.01 at 1.12728 [#2 sell 0.01 EURUSD at 1.12728]
GJ      0       09:12:21.192    TestEA (EURUSD,H1)      2016.04.14 00:00:30   CTrade::OrderSend: instant sell 0.01 EURUSD at 1.12728 [done at 1.12728]
KH      0       09:12:21.192    Trade   2016.04.14 00:00:31   instant buy 0.02 EURUSD at 1.12736 (1.12728 / 1.12736 / 1.12728)
OD      0       09:12:21.192    Trades  2016.04.14 00:00:31   deal #3 buy 0.02 EURUSD at 1.12736 done (based on order #3)
GI      0       09:12:21.193    Trade   2016.04.14 00:00:31   deal performed [#3 buy 0.02 EURUSD at 1.12736]
LM      0       09:12:21.193    Trade   2016.04.14 00:00:31   order performed buy 0.02 at 1.12736 [#3 buy 0.02 EURUSD at 1.12736]
NS      0       09:12:21.193    TestEA (EURUSD,H1)      2016.04.14 00:00:31   CTrade::OrderSend: instant buy 0.02 EURUSD at 1.12736 [done at 1.12736]
OP      0       09:12:21.193    TestEA (EURUSD,H1)      2016.04.14 00:00:32   Вход в функцию Закрытие  позиции по типу !
GI      0       09:12:21.193    Trade   2016.04.14 00:00:32   close position #2 sell 0.01 EURUSD by position #3 buy 0.02 EURUSD (1.12728 / 1.12736 / 1.12728)
OM      0       09:12:21.193    Trades  2016.04.14 00:00:32   deal #4 buy 0.01 EURUSD at 1.12736 done (based on order #4)
RK      0       09:12:21.193    Trades  2016.04.14 00:00:32   deal #5 sell 0.01 EURUSD at 1.12728 done (based on order #4)
EF      0       09:12:21.193    TestEA (EURUSD,H1)      2016.04.14 00:00:32   CTrade::OrderSend: unknown action 10 [done]
EI      0       09:12:21.423    Trade   2016.04.14 23:59:59   position closed due end of test at 1.12663 [#3 buy 0.01 EURUSD 1.12736]
JG      0       09:12:21.423    Trades  2016.04.14 23:59:59   deal #6 sell 0.01 EURUSD at 1.12663 done (based on order #5)
HN      0       09:12:21.423    Trade   2016.04.14 23:59:59   deal performed [#6 sell 0.01 EURUSD at 1.12663]
IS      0       09:12:21.423    Trade   2016.04.14 23:59:59   order performed sell 0.01 at 1.12663 [#5 sell 0.01 EURUSD at 1.12663]