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

 

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

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]
[Удален]  
Подскажите, что нужно писать в коде, чтобы ордера не открывались на каждом тике?
 
int OnInit()
  {
   double LotSize(string symbol,datetime tbar)
     {
      double size;
      string BQ,currency=AccountCurrency();
      switch(MarketInfo(symbol,MODE_PROFITCALCMODE))
        {
         case 0:
           {
            int sbar=iBarShift(symbol,0,tbar);
            size=MarketInfo(symbol,MODE_LOTSIZE);
            if(StringSubstr(symbol,3,3)=="USD") break;
            if(StringSubstr(symbol,0,3)=="USD") size=size/iClose(symbol,0,sbar);
            else
              {
               BQ=StringSubstr(symbol,0,3)+"USD";
               if(iClose(BQ,0,0)==0) BQ="USD"+StringSubstr(symbol,0,3);
               if(iClose(BQ,0,0)==0) break;
               int BQbar=iBarShift(BQ,0,tbar);
               if(StringSubstr(BQ,0,3)=="USD") size=size/iClose(BQ,0,BQbar)/iClose(symbol,0,sbar);
               else size=size*iClose(BQ,0,BQbar)/iClose(symbol,0,sbar);
              }
           }
         break;
         case 1: size=MarketInfo(symbol,MODE_LOTSIZE); break;
         case 2: size=MarketInfo(symbol,MODE_TICKVALUE)/MarketInfo(symbol,MODE_TICKSIZE);
        }
      if(currency!="USD")
        {
         BQ=currency+"USD";
         if(iClose(BQ,0,0)==0)
           {
            BQ="USD"+currency;
            size*=iClose(BQ,0,iBarShift(BQ,0,tbar));
           }
         else size/=iClose(BQ,0,iBarShift(BQ,0,tbar));
        }
      return(size);
     }
При компилировании две ошибки:  никак не соображу что не так и как исправить. Подскажите плиз.