Открыть сделку с символом, отличным от того, который советник запускает на MQL4.

Итак, я хочу открывать сделки в зависимости от нескольких критериев с помощью моего советника... На самом деле это не имеет значения, TBH...

Проблема в том, что советники запускаются в одном окне. Поэтому, естественно, я бы хотел, чтобы советник открывал условия оценки и открывал все сделки на одном графике. Все хорошо, кроме...

Брокер не позволит советнику, работающему на одном графике, открыть сделку на другом графике... Это, безусловно, так. Я исключил любой другой случай.

Входные данные только для этого примера:

input double LotSize = 0.01;

input int Slippage = 10;

input double StopLoss = 1000.0;

input double TakeProfit = 1000.0;

input const string SymbolA = "EURUSD";

input const string SymbolB = "GBPUSD";

Команды, которые я использую (я их скопировал из другого советника, который отлично работает, поэтому я уверен, что они тоже работают, плюс я использовал экстремальные значения TP/SL, чтобы превзойти любые ограничения, которые могут быть у брокеров):

       TicketA = OrderSend(SymbolA,OP_SELL,LotSize,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,EAComment,OrderTicket(),0,clrDarkRed);

       Sleep(1000);

       TicketB = OrderSend(SymbolB,OP_BUY,LotSize,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,EAComment,OrderTicket(),0,clrDarkBlue);

Ошибка (EURUSD один открывается нормально, так как советник работает на графике EURUSD):

2020.12.18 01:01:45.318 '22644076': ордер на покупку рынок 0,01 GBPUSD sl: 1,21670 tp: 1,23670

2020.12.18 01:01:45.528 '22644076': ордер на покупку 0,01 GBPUSD открытие на рынке sl: 1,21670 tp: 1,23670 не удалось [Неверный S/L или T/P]

Любое предложение, как я могу исправить/обойти это?

Заранее спасибо!


person Pantelis Pap.    schedule 05.01.2021    source источник


Ответы (1)


Очевидно, что вы должны установить другую цену открытия, стоп-лосс и тейк-профит для другого символа. Итак, если вы коллируете по текущей (SymbolA) этой продаже:

TicketA = OrderSend(SymbolA,OP_SELL,LotSize,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,EAComment,OrderTicket(),0,clrDarkRed);

Затем для SymbolB (другой символ) вы должны сначала построить значения цены:

double Ask_B = SymbolInfoDouble(SymbolB, SYMBOL_ASK);
double Point_B = SymbolInfoDouble(SymbolB, SYMBOL_POINT);
int Digits_B = SymbolInfoInteger(SymbolB, SYMBOL_DIGITS);
double SL_B = NormalizeDouble(Ask_B - StopLoss * Point_B, Digits_B);
double TP_B = NormalizeDouble(Ask_B + StopLoss * Point_B, Digits_B);

И только потом вызывать что-то вроде этого:

TicketB = OrderSend(SymbolB,OP_BUY,LotSize,Ask_B,Slippage,SL_B,TP_B,EAComment,OrderTicket(),0,clrDarkBlue);
person Enivid    schedule 05.01.2021
comment
Риииийт. Он берет BID и ASK от текущего символа. Скоро проверим его и сообщим вам / одобрим его как ответ. - person Pantelis Pap.; 07.01.2021
comment
Работал! Большое спасибо. Должен был подумать об этом сам. - person Pantelis Pap.; 07.01.2021