Добрый вечер. Помогите пожалуйста с советником, для наглядности всё постарался изобразить на рисунке. Допустим образовался ''Додж'' я когда цена СЛЕДУЮЩЕГО бара выше максимума "Доджа" - покупаю, Т/Р допустим 15 пунктов я взял, а цена на этом же баре так и идёт в верх и ордер (Buy_2) с Т/Р 15 пунктов открывается опять, а мне это 2е открытие (Buy_2) на 1м баре после "Доджа" не надо. Как убрать это недоразумение ???
для наглядности всё постарался изобразить на рисунке
Теперь попробуйте изобразить тоже самое, только на mq4. Здесь ветка для вопросов, если что непонятно. А для создания советников с нуля есть сервис Работа
Суть стратегии: Вход по сигралу стохастика(5,14,3) выход тоже по стохастику только с другим периодом (5,3,3). Вот я не пойму как можно зделать выход по стохастику, а не по обратному сигнагалу? У меня появилась проблема и я не представляю как ее можно решить постараюсь объяснить. Значит в коде есть, который я выложил, есть 2 функции
//+------------------------------------------------------------------+//| подготовить массив тикетов для закрытия |//+------------------------------------------------------------------+void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----if (size==0) return;
int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// если тип ордера не рыночный, то пропускаемif (type>OP_SELL) continue;
if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}
// тут решаем для каждого открытого ордера его судьбу// оставить в рынке или добавить в массив на закрытиеif (type==OP_BUY)
{
//// код разрешающий оставить покупку// как примерif (signal==OP_BUY) continue;
}
if (type==OP_SELL)
{
//// код разрешающий оставить продажу// как примерif (signal==OP_SELL) continue;
}
closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(lots,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][2]; // закрываемый объем// можно закрывать частично, тогда нужно переписать строку сверху
}
//----return;
}
//+------------------------------------------------------------------+//| Закрывает ордера с указанными тикетами |//+------------------------------------------------------------------+void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;
int ticket,type;
double lots;
bool res;
int total=OrdersTotal();
for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // на всякий случай обновим сведения о рыночном окружении// блок закрытия покупокif (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в покупку #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}
// блок закрытия продажif (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в продажу #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}
}
//----return;
}
В функции void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) нужно поставить условие после которого решиться оставлять ордер или закрывать его... Пробовал ставить условия но ничего не получается.... Может кто нибуть посмотрит и покажет есть ли в этих функциях ошибка или это я накасячил....
Подскажите, если у меня два раза подряд идёт установка ордеров командой OrderSend, то надо ли мне ставить между ними функцию проверки состояния IsTradeAllowed
или в этом нет необходимости и советник перейдёт от первого вызова OrderSend ко второму только после успешно установленного ордера ?
если IsTradeAllowed ставить все же надо то какую временную задержку надо выставить в цикл while ?
Подскажите, если у меня два раза подряд идёт установка ордеров командой OrderSend, то надо ли мне ставить между ними функцию проверки состояния IsTradeAllowed
или в этом нет необходимости и советник перейдёт от первого вызова OrderSend ко второму только после успешно установленного ордера ?
В тестере не надо, а на демо или реале получите сообщение о занятом торговом потоке.
Desead:
если IsTradeAllowed ставить все же надо то какую временную задержку надо выставить в цикл while ?
Зависит от скорости исполнения, которая для разных серверов отличается. Не забудьте также добавить проверку в цикле на IsStopped(), а иначе Вам удачи не видать.
Здравствуйте! Подскажите пожалуйста, где можно скачать архив подробных котировок (тиковый или минутный)? Те данные что есть в Архиве котировок в МТ 4 (кот наплакал) минутных только дней на 5 теста.
Добрый день. В системе предусмотрено три точки входа для BUY и SELL. Но когда поступает сигнал, то позиции открываются на каждом тике пока сигнал существует. Где-то существует ошибка с флагами. Помогите разобраться, пожалуйста.
Добрый день. В системе предусмотрено три точки входа для BUY и SELL. Но когда поступает сигнал, то позиции открываются на каждом тике пока сигнал существует. Где-то существует ошибка с флагами. Помогите разобраться, пожалуйста.
OrdersTotal() выдает количество уже открытых позиций, т.е. с ее помощью можно проверить, есть уже открытая позиция или еще нет.
Добрый вечер. Помогите пожалуйста с советником, для наглядности всё постарался изобразить на рисунке. Допустим образовался ''Додж'' я когда цена СЛЕДУЮЩЕГО бара выше максимума "Доджа" - покупаю, Т/Р допустим 15 пунктов я взял, а цена на этом же баре так и идёт в верх и ордер (Buy_2) с Т/Р 15 пунктов открывается опять, а мне это 2е открытие (Buy_2) на 1м баре после "Доджа" не надо. Как убрать это недоразумение ???
Уважаемые профи и просто знающие!
Я в прострации - индикатор ББ даёт непонятные мне сигналы (не "Красный-зелёный-красный"!). А точнее, задаю такой вызов:
bolup = iBands(Symbol(), 0, 24, 0, 2, 0, 1, 1);
boldn = iBands(Symbol(), 0, 24, 0, 2, 0, 2, 1);
bolmd = (bolup + boldn) / 2;
Print("Bands upper = ", bolup);
Print("Bands lower = ", boldn);
Print("Bands media = ", bolmd);
В результате все 3 переменные дают одно и то же значение. >8-O
Пара евра, ТФ - Н1. Есть идеи???
Спасибо заранее...
для наглядности всё постарался изобразить на рисунке
Уважаемые профи и просто знающие!
Я в прострации - индикатор ББ даёт непонятные мне сигналы (не "Красный-зелёный-красный"!). А точнее, задаю такой вызов:
bolup = iBands(Symbol(), 0, 24, 0, 2, 0, 1, 1);
boldn = iBands(Symbol(), 0, 24, 0, 2, 0, 2, 1);
bolmd = (bolup + boldn) / 2;
Print("Bands upper = ", bolup);
Print("Bands lower = ", boldn);
Print("Bands media = ", bolmd);
В результате все 3 переменные дают одно и то же значение. >8-O
Пара евра, ТФ - Н1. Есть идеи???
Спасибо заранее...
У меня появилась проблема и я не представляю как ее можно решить постараюсь объяснить.
Значит в коде есть, который я выложил, есть 2 функции
В функции void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) нужно поставить условие после которого решиться оставлять ордер или закрывать его...
Пробовал ставить условия но ничего не получается....
Может кто нибуть посмотрит и покажет есть ли в этих функциях ошибка или это я накасячил....
В тестере не надо, а на демо или реале получите сообщение о занятом торговом потоке.
Добрый день. В системе предусмотрено три точки входа для BUY и SELL. Но когда поступает сигнал, то позиции открываются на каждом тике пока сигнал существует. Где-то существует ошибка с флагами. Помогите разобраться, пожалуйста.
Добрый день. В системе предусмотрено три точки входа для BUY и SELL. Но когда поступает сигнал, то позиции открываются на каждом тике пока сигнал существует. Где-то существует ошибка с флагами. Помогите разобраться, пожалуйста.
OrdersTotal() выдает количество уже открытых позиций, т.е. с ее помощью можно проверить, есть уже открытая позиция или еще нет.