Уважаемые программисты помогите пожалуйста !
Нужен код для советника чтобы закрывал все ордера по профиту депозита но не выключался .Уже не первый день интернет рою а результата нет.
Если кому не лень запихать его туда....
Доработка советников: общая тема📌
От Garfik, 4 августа, 2011 в Уголок Программиста
Добрый день. Пытался сам написать, но видимо руки не оттуда у меня, поэтому прошу помощи у людей с руками из плеч, нужно 2 индикатора с алертом, оба простые и на основе полос боленджера, первый должен сигналить при пробое одной из крайних линий, а второй при обратном пробое (возвращении в канал), желательно чтобы сигнал был секунд за 10 до закрытия свечи
Здравствуй народ!
Хочу написать сов по такой стратегии, а именно!
Цена пробивает уровень нижний или верхний(сопротивление или поддержку), затем откатывается к этому уровню с низу верх или наоборот сверху вниз, после чего и открываем сделки, что - то написал, но почему не работет никак не вкурю.
for(i = 5; i {
double Closei = Close;
long volumei = Volume;
double LastFractal_UP = iFractals(_Symbol,_Period,MODE_UPPER,i);
double LastFractal_Doun = iFractals(_Symbol,_Period,MODE_LOWER,i);
double Open1 = iClose(NULL,0,1);
if((Close1 > Open1 && Close2 > Open2 && Close1-Open2>20*Point)||(Close1 > Open1 && Close1-Open1 > 20*Point))IMPULS_UP = true;
if((Close1 20*Point)||(Close1 20*Point))IMPULS_LO = true;
if(IMPULS_UP && Close1 > LastFractal_UP_H1 && volumei >= volume_level)Trade(OP_BUYLIMIT, TPCoef);
if(IMPULS_LO && Close1 = volume_level)Trade(OP_SELLLIMIT, TPCoef);
}
Есть идеи?))
Нужно делать точность или размер области, размер отскока цены для входа. Ещё есть теория, что с каждым отскоком сила уровня теряется - значит надо считать количество подходов цены ранее... в общем работа не малая.
Вход по нин бару думаю делать, а на счет массива можно черкануть,если не ирудно))
Если честно то у меня с массивами туго(Это всё что я смог придумать и то, полоивна с сайта tradelikeapro.ru видео обучения MQL4,
а как дальше связать эти массивы не знаю
double FractUp [300];
double FractLo [300];
double Hi [300];
double Lo [300];
ArrayResize(Fract,300);
ArrayResize(FractLevel,300);
int j = 0;
int f = 0;
int m = 0;
int k = 0;
for(i=1;i {
HideTestIndicators(true);
LastFractal_UP = iFractals(_Symbol,60,MODE_UPPER,i);
LastFractal_Doun = iFractals(_Symbol,60,MODE_LOWER,i);
HideTestIndicators(false);
if(LastFractal_UP!=0)
{
FractUp[j]=LastFractal_UP;
j++;
}
if(LastFractal_Doun!=0)
{
FractLo[f]=LastFractal_Doun;
f++;
}
LastHi = iHighest(NULL, 0, MODE_HIGH, History, i)
LastLo = iLowest(NULL, 0, MODE_LOW, History, i)
if(LastHi!=0)
{
Hi[m]=LastHi;
m++;
}
if(LastLo!=0)
{
Lo[k]=LastLo;
k++;
}
}
Подскажите не знающему пожалуйста
Изменено 10 апреля, 2018 пользователем 0ll
Вам нужно определиться с общим алгоритмом работы, если опыта в программировании нет, то лучше упростить, например:
1. ждём закрытие бара
2. если бар медвежий или дневной минимум, берём Лоу и ищем на периоде 5 дней локальный Хай с точностью Х-пипс
для бычьего бара или дневного хая наоборот
3. если хай на истории найден и отскок цены от этой области в пределах У-пипс - входим
Изменено 10 апреля, 2018 пользователем 0ll
Помогите разобраться.Советник не отображается в тестере.На графике есть а в тестере не появляется.
Слева-вверху есть выбор Советник/Индикатор - должен быть выбран Советник.Помогите разобраться.Советник не отображается в тестере.На графике есть а в тестере не появляется.
Потом открываете список советников, он аналогичен списку в панели Навигатор, с которой Вы устанавливаете на график.
Других пояснений у меня нет.
Добрый день. Подскажите где накосячил? До ввода MAV и внедрения ее в формулу все работало. Но теперь даже при удалении, ново видений остаются те же ошибки только уже относятся к ниже стоящим строкам. Менял название аргумента MAV на более длинное, но без изменений в формуле и при этом все скомпилировалось без ошибок, но после внесения изменений в формулы все опять по пизде, возврат к тому к компилирующемуся состоянию выдает опять ошибку. Может дело в редакторе?
после kolpos ";" поставте
блин, точно. Спасибо большое. Тогда может еще один момент кто подскажет: требуется закрывать ордера через определенное время. Как это прописать?
если от времени открытия:
if ( TimeCurrent() - OrderOpenTime() > xx_sec ) OrderClose(...);
Sacred70 от времени открытия или от чего?
если от времени открытия:
if ( TimeCurrent() - OrderOpenTime() > xx_sec ) OrderClose(...);
Да, от времени открытия. Но почему то не срабатывает. Может не туда ткнул?
Да, от времени открытия. Но почему то не срабатывает. Может не туда ткнул?
А ордер у Вас предварительно выбран?
А ордер у Вас предварительно выбран?
он всегда один
Какая разница?
А ордер у Вас предварительно выбран?
он всегда один
OrderSelect() в любом случае нужен. Из справки:
OrderOpenTimeВозвращает время открытия выбранного ордера.
datetime OrderOpenTime();Возвращаемое значение
Время открытия выбранного ордера.
Примечание
Ордер должен быть предварительно выбран с помощью функции OrderSelect().
Пример:
if(OrderSelect(10, SELECT_BY_POS)==true)
Print("open time for the order 10 ", OrderOpenTime());
else
Print("OrderSelect() вернул ошибку - ",GetLastError());[/spoiler]
все понял, спасибо, у меня как то отдельно все это было
int tiket = OrderSend(...);
if ( tiket else
{
OrderSelect( tiket, SELECT_BY_TICKET );
// здесь выставление СЛ/ТП
}
Люди добрые и терпеливые))) объясните дураку, где тут косяк, вроде все учел, но все равно на тесте сделки открываются сразу в обе стороны и в ту же закрываются и так каждую минуту
осталось только написать условия открытия и закрытия, работает это так:
- сначала описываем переменные, желательно на глобальном уровне, т.е. выше OnTick():
int TKSELL = -1, TKBUY = -1;
- Вы написали условие открытия на основании индикаторов (нужно добавить условие TKSELL TKSELL = OrderSend(...);
OrderSelect(TKSELL , SELECT_BY_TICKET);
- потом пишите условия закрытия по времени, но нужно добавить TKSELL >= 0 && OrderTimeClose() CLSELL = OderClose(TKSELL, ... );
if ( CLSELL ) TKSELL = -1; // сбрасываем номер тикета
По названию переменной ничего не происходит, она просто хранит число. Для Бай стороны аналогично - попробуй сам.
Удачи!
Получилось частично)) Теперь открываются только buy, но закрываются через минуту. Мне кажется все это заговор массонов :-/, ну не могу же я быть таким тупым (наверное)))) уже 3 ночи пишу эту поэму и самое страшное что это даже не половина моей задумки. Ткнит меня носом, пожалуйста))
Изменено 28 апреля, 2018 пользователем Sacred70
Вы не убрали OrderClose после вызова индикаторов. Есть ощущение что у Вас нет пока понимания как работает советник.
Попробую объяснить:
функция OnTick запускается с приходом каждого тика, т.е. в среднем 1/сек опрашиваются индюки, закрываются ордера, проверяются условия на вход и т.д. Вот зачем Вам на каждом тике закрывать ордера?
Вы не используете {} скобки после операторов if() - это может работать не корректно, нужно сделать на бумаге структуру программы и потом программировать, пример алгоритма:
1. получаем данные индикаторов
2. если нет ордеров Бай, проверяем условия на вход Бай
{ 2.1. если выполнено - вход. запоминаем тикет Бай. }
3. если нет ордеров на селл, проверяем условия на вход Селл.
{ 3.1. если выполнено - вход Селл. запоминаем тикет Селл. }
4. Если есть ордер Бай - проверяем условия на выход Бай
{ 4.1. если выполнено - выход Бай, сбрасываем тикет Бай. }
и т.д. - попробуйте, может поможет.
В программе это выглядит так:
if ( TKBUY {
// проверяем условия на вход Бай
if ( ...&&... . ) TKBUY = OrderSend(...);
}
else // ордер Бай в рынке
{
// проверяем условия на выход
if ( ...&&... . )
{
CLBUY = OrderClose(...);
if ( CLBUY ) TKBUY = -1;
}
}
короче нужна структура программы, иначе утонете в логических ошибках.
про {} знаю, экспериментировал и как положено и как придется)). Спасибо за направление, завтра начну копать снова. Как и просили выкладываю файл советника.
Нашел в открытом коде советник FapTurbo. Вроде раньше неплохо ночью зарабатывал, пока не стали повышать ночью спреды. Сейчас можно найти брокеров с приемлемыми ночными спредами. Многие используют для ночной торговли советник Generic, использующий полосы болинджера. FapTurbo использует RSI и МА, а также фильтры. Говорят все новое - хорошо забытое старое. Хотелось бы посмотреть, что можно из него сейчас выжать, но не могу дать ладу, чтобы привести код в актуальное состояние. Коллеги, помогите, пожалуйста, привести код в порядок, ошибок не выдает, но есть предупреждения. В итоге не торгует, в журнале - пусто.
Если просто СЛ/ТП, то можно сделать, если какое-то сопровождение, то нужно смотреть, могут быть нюансы...Нужна помощь программиста. Есть советник,хочу его приспособить под торговлю по ТС Спринт.Для этого нужно изменить только направление входа первого ордера
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем