Один советчик на несколько валютных пар

 

Как сделать так, чтобы можно было один советчик использовать на разных валютных парах одновременно? Дело в том, что мой код работает только на одной из пар (точнее, если советчик стоит на "GBPUSD" и "EURUSD" то срабатывает только одна из пар, но если включить советчик сначала на "GBPUSD" а потом на "EURUSD" - то все нормально)!


Есть глобальные переменные:

string vp[3][2] = {"GBPUSD", "EURUSD", "100", "110", "0", "0"};

// "GBPUSD", "EURUSD" - Валютная пара,

// "100", "110" - идентыфикатор для отложеного ордера,

// "0", "0" - Состояние (0 - нет отложеного ордера; Bid - Цена Bid, при коророй сработал отложеный ордер)


В функции start() создаем отложеный ордер на покупку:

if (val_p(1)==0)

{

OrderSend (Symbol(), OP_BUYLIMIT, 0.1, val_p(1)-50, 3, val_p(1) - 0.0150, val_p(1), "Советник", val_p(2), 0, Green);

}


Ну и создал свою функцию val_p(int k), которая должна находить элементы из масива vp[i][j]:

double val_p (int k)
{
for (int j=0; j<2; j++)
{
if (k==0) { vp[2][j] = "0"; } // Онуляем все значения
else if (Symbol()==vp[0][j]) { break; } // Ищим нужную позыцию в масиве для пары
}


if ((k==1) && (vp[2][j]=="0")) { vp[2][j] = Bid; return (0); } // Выставляем цену покупки для пары
else if ((k==1) && (vp[2][j]!="0")) { return (StrToDouble(vp[2][j])); } // Берем цену покупки для пары
if (k==2) { vp[1][j] = StrToInteger (vp[1][j]) + 1; return (StrToInteger(vp[1][j])); } // Идентыфикатор пары
}

 
vah-smile:

Как сделать так, чтобы можно было один советчик использовать на разных валютных парах одновременно?

Не проще ли не изобретать велосипед, а поставить два советника, каждый на свою пару?

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

 
Reshetov:

Не проще ли не изобретать велосипед, а поставить два советника, каждый на свою пару?

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


Ну я так и делаю! Тоисть беру свой советчик и перетягиваю сначала на "GBPUSD" а потом на "EURUSD". Но если включить советчик (кнопкой на панели инструментов), то торговля происходит только по одной паре! А хотелось бы чтобы он работал как на "GBPUSD" так и на "EURUSD"!


Возможно я немного непонятно описал проблему! Попробую немного попроще:

Припустим нам в кое-какой момент нужно открыть 3 отложеных ордера на Buy Limit с промежутком 10


if (b==true)

{

for (int i=1; i<=3; i++)

{

OrderSend (/* Здесь параметры отложеного ордера */);

}

b=false;

}


Этот код я поставил в функцию start(). Код (советчик) нормально работает в следующих случаях:

  • если советчик стоит только на одной валютной паре
  • при включенной кнопке советчика (на панели инструментов) поочериде перетаскывать советчик на несколько советчиков при условии, что отложеный ордер для текущей пары установлен.

Если же советник стоит на нескольких парах, то советник срабатывает только для одной валютной пары! Как это исправить?