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

 

Вот и сам експерт-поочистил ненунужное-там много било :)

Файлы:
 

Как закрыть ордер???

Открыл вот так:

mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение

         mrequest.price = NormalizeDouble(Ask,_Digits);                       // последняя цена ask

         mrequest.sl = NormalizeDouble(Ask - 10000*_Point,_Digits);           // Stop Loss

         mrequest.tp = 0;                                                     // Take Profit

         mrequest.symbol = _Symbol;                                            // символ

         mrequest.volume = Lots;                                                // количество лотов для торговли

         mrequest.magic = 1;                                                  // Magic Number

         mrequest.type = ORDER_TYPE_BUY;                                       // ордер на покупку

         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего

         mrequest.deviation=100;                                               // проскальзывание от текущей цены

         OrderSend(mrequest,mresult); 

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

 
Forex_Noob: Как закрыть ордер???

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

1. Вставляйте код правильно.

2. Если открыты несколько ордеров в одном направлении, то результатом является одна совокупная позиция.

3. Для закрытия открытой позиции необходимо выставить противоположно направленные ордера, совокупный объём которых равен объёму закрываемой позиции.

4. Если необходимо закрыть только часть позиции, то и выставлять нужно  противоположно направленные ордера с соответствующим совокупным объёмом.

 
Yedelkin:

1. Вставляйте код правильно.

2. Если открыты несколько ордеров в одном направлении, то результатом является одна совокупная позиция.

3. Для закрытия открытой позиции необходимо выставить противоположно направленные ордера, совокупный объём которых равен объёму закрываемой позиции.

4. Если необходимо закрыть только часть позиции, то и выставлять нужно  противоположно направленные ордера с соответствующим совокупным объёмом.

ок. спасибо.  только теперь другая проблема - не всегда закрываются позы по закрывающему ордеру...
 
Forex_Noob:
ок. спасибо.  только теперь другая проблема - не всегда закрываются позы по закрывающему ордеру...
Смотрите в журнале - туда записываются результаты.
 

Yedelkin,Reshetov,

Здравствуйте,

Подскажите самый простой метод/способ ,что бы получат данны из один индикатор для несколко пар.

string Currency1 = "GBPUSD";
string Currency2 = "EURUSD";
string Currency3 = "USDCHF";
string Currency4 = "USDJPY";
int ATRHandle;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  for(int c=0;c<4;c++){
  SymbolSelect(Currency1,true);
  SymbolSelect(Currency2,true);
  SymbolSelect(Currency3,true);
  SymbolSelect(Currency4,true);
  }
  ATRHandle = iATR(Symbol(),PERIOD_M1,1);
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(ATRHandle);
   Comment("");        
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//Например так,как показал
  }
//+------------------------------------------------------------------+
За ранее спосибо.
 
mario065: Подскажите самый простой метод/способ ,чтобы получать данные из одного индикатора для нескольких пар.

Вы про это?:

ATRHandle1 = iATR(Currency1,PERIOD_M1,1);
ATRHandle2 = iATR(Currency2,PERIOD_M1,1);
ATRHandle3 = iATR(Currency3,PERIOD_M1,1);
ATRHandle4 = iATR(Currency4,PERIOD_M1,1);
 
Yedelkin:

Вы про это?:

Привет,

Конечно что нет.

Если несколко индюка,то надо для каждого делат по столко раз,сколко пар ест.

Один хендел,чтоб ползовали все пар. 

 
mario065: Если несколко индюка,то надо для каждого делат по столко раз,сколко пар ест. Один хендел,чтоб ползовали все пар. 

То есть Вы хотите, чтобы был один хендл, а индикатор iATR при этом работал с разными символами?

Из описания индикатора iATR видно, что он предназначен для работы только с одним символом. Поэтому для работы с 4 символами придётся запускать 4 копии индикатора iATR. В свою очередь, хендл нужен для того, чтобы получать доступ  к значениям конкретной запущённой копии индикатора. И если запущено 4 копии индикатора, то всё равно придётся  хранить где-то соответствующие хендлы. 

Если же вопрос об использовании только одного хендла является принципиальным, то тогда придётся переписывать индикатор iATR так, чтобы он работал сразу с несколькими символами, имел соответствующее число массивов значений и  т.д. Тогда можно будет использовать один хендл

handle = myATR(Currency1,Currency2,Currency3,Currency4,PERIOD_M1,1);

и с его помощью обращаться к тому или иному индикаторному буферу из  myATR.

 

Можно записать и так (схематично):

string Currency[4] = {"GBPUSD","EURUSD","USDCHF","USDJPY"}; //могу ошибиться в части правильности записи присвоения значений, но проверить легко по Справочнику
int ATRHandle[4];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   for(int c=0;c<4;c++) SymbolSelect(Currency[с],true);
   for(int c=0;c<4;c++) ATRHandle[с] = iATR(Currency[с],PERIOD_M1,1);
   return(0);
  }
Причина обращения: