Код данной функции (см. код ниже):
- Код: выделить все
void f_SetOrder(string sy, int op, double ll, double pp, double sl, double tp, int si,
int mn, string co, datetime ex)
{
/*
Дата: 26 октября 2015 г.
Сторонних ресурсов не использует!
Описание функции: Установка ордера
Параметры:
sy - наименование инструмента ("0" - текущий символ)
op - операция (OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP)
ll - лот
pp - цена
sl - уровень стоп
tp - уровень тейк
si - проскальзывание (slippage) (пнт.)
mn - Magic Number
co - комментарий
ex - Срок истечения
*/
int int_Tic = 0;
int int_Try = 5; // Количество торговых попыток
bool bol_Sou = false; // Использовать звуковой сигнал
string str_Suc = "ok.wav"; // Звук успеха
string str_Err = "timeout.wav"; // Звук ошибки
bool bol_Sin = true; // Использовать значок открытия сделки?
color clOpen = clrNONE,
clOpenBuy = LightBlue, // Цвет значка открытия покупки
clOpenSell = LightCoral; // Цвет значка открытия продажи
if(sy == "0") sy = Symbol();
int int_Dig = (int) MarketInfo(sy, MODE_DIGITS);
if(co == "") co = WindowExpertName();
if(ex > 0 && ex < TimeCurrent()) ex = 0;
if(op == OP_BUYLIMIT || op == OP_BUYSTOP)
{
if(bol_Sin) clOpen = clOpenBuy;
}
else if(op == OP_SELLLIMIT || op == OP_SELLSTOP)
{
if(bol_Sin) clOpen = clOpenSell;
}
for(int i = 1; i <= int_Try; i++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))
{
Print("SetOrder(): Остановка работы функции");
break;
}
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
pp = NormalizeDouble(pp, int_Dig);
int_Tic = OrderSend(sy, op, ll, pp, si, sl, tp, co, mn, ex, clOpen);
if(int_Tic > 0)
{
if(bol_Sou) PlaySound(str_Suc);
Print("Функция OrderSend успешно выполнена");
break;
}
else if(int_Tic < 0)
{
if(bol_Sou) PlaySound(str_Err);
Print("OrderSend завершилась с ошибкой #", GetLastError());
}
}
}
Данная функция осуществляет заданное количество попыток установки ордера, сопровождается соответствующими сигналами в случае успеха или неудачи. Вводимые параметры подробно описаны в самой функции.