Спасибо, давно хотел увидеть пример кода с функционалом обновлённого МКЛ4++
Думаю, если сюда добавить вход по нормальному ГСЧ (не того что в МКЛ, есть например этот) вместо жестко заданного направления входа, причём и в начале работы, и после стоплосса, то удастся немного уменьшить количество убыточных ходов.
Спасибо, давно хотел увидеть пример кода с функционалом обновлённого МКЛ4++
Думаю, если сюда добавить вход по нормальному ГСЧ (не того что в МКЛ, есть например этот) вместо жестко заданного направления входа, причём и в начале работы, и после стоплосса, то удастся немного уменьшить количество убыточных ходов.
Да согласен и подтверждаю ... У меня есть несколько вариантов с торговой тактикой результаты лучше, в интернете часто продают такого советника за приличные деньги, что бы человек знал что покупает, я выложил бесплатно классическую версию без всяких премудростей и простую как два пальца.... Надеюсь данный код будет полезным не только как пример программирования, но и как пример тактик Мартингейл и Антимартингейл.
Дошли руки до вашего кода, несколько нубских вопросов:
1) Непонятно только как сработает ретурн в функции типа войд.
2) Ещё вот это
if(Typ==0 && Lot==0 && Pro==0) // если нам из истории ордеров по нашему меджик номеру вернулись нули
Это если предыдущий был на покупку. А если предыдущий ордер был на продажу и Typ==1 что тогда будет?
А ещё в истории могли быть торги от руки или там другой советник торговал. Тогда выходит ваш советник так и не начнёт торговать? В тестере-то всё просто, каждый раз история чистая...
3) В этой вот функции точно не нужно фигурные скобки ставить чтобы блоки if не пересекались? Путаницы не возникнет?
void OnTick() { if(!counter(BUY) && !counter(SEL)) // Проверим есть ли оредра советника ,если нет баев и нет селов { // Запросим данные из истории ордеров о последнем закрытом ордере и вернем требуемые нам значения // тип ордера, лот ордера, и его профит history(Typ,Lot,Pro); if (Pro>0 && TypTrade ==0) Lot=StartLot; // если советник работает в режиме мартингейл и профит больше ноля // то лот сделаем равным стартовому для позиции в том же направлении if (Pro<0 && TypTrade ==1) Lot=StartLot; // если советник работает в режиме антимартингейл и профит меньше ноля // то лот сделаем равным стартовому для позиции в том же направлении // Для первого ордера if(Typ==0 && Lot==0 && Pro==0) // если нам из истории ордеров по нашему меджик номеру вернулись нули // значит нужно ткрыть первый ордер if(openorders(StartPoz,StartLot)) // если первы ордер открыт if(modify())return; // модифицируем его и в случае успешной модификации передадим управление терминалу if(Typ==BUY && Lot!=0 && Pro>0) // если последний закрытый ордер был на покупку и его профит больше нуля if(openorders(BUY,Lot*ALot)) // откроем ордер на покупку лотом в зависимости от типа TypTrade if(modify())return; // модифицируем его и в случае успешной модификации передадим управление терминалу if(Typ==BUY && Lot!=0 && Pro<0) // если последний закрытый ордер был на покупку и его профит меньше нуля if(openorders(SEL,Lot*MLot)) // откроем ордер на пр одажу лотом в зависимости от типа TypTrade if(modify())return; // модифицируем его и в случае успешной модификации передадим управление терминалу if(Typ==SEL && Lot!=0 && Pro>0) // если последний закрытый ордер был на продажу и его профит больше нуля if(openorders(SEL,Lot*ALot)) // откроем ордер на пр одажу лотом в зависимости от типа TypTrade if(modify())return; // модифицируем его и в случае успешной модификации передадим управление терминалу if(Typ==SEL && Lot!=0 && Pro<0) // если последний закрытый ордер был на продажу и его профит меньше нуля if(openorders(BUY,Lot*MLot)) // откроем ордер на покупку лотом в зависимости от типа TypTrade if(modify())return; // модифицируем его и в случае успешной модификации передадим управление терминалу } else return ; // если ордера есть то передадим управление терминалу }
Дошли руки до вашего кода, несколько нубских вопросов:
1) Непонятно только как сработает ретурн в функции типа войд.
2) Ещё вот это
if(Typ==0 && Lot==0 && Pro==0) // если нам из истории ордеров по нашему меджик номеру вернулись нули
Это если предыдущий был на покупку. А если предыдущий ордер был на продажу и Typ==1 что тогда будет?
А ещё в истории могли быть торги от руки или там другой советник торговал. Тогда выходит ваш советник так и не начнёт торговать? В тестере-то всё просто, каждый раз история чистая...
3) В этой вот функции точно не нужно фигурные скобки ставить чтобы блоки if не пересекались? Путаницы не возникнет?
void OnTick() { if(!counter(BUY) && !counter(SEL)) // Проверим есть ли оредра советника ,если нет баев и нет селов { // Запросим данные из истории ордеров о последнем закрытом ордере и вернем требуемые нам значения // тип ордера, лот ордера, и его профит history(Typ,Lot,Pro); if (Pro>0 && TypTrade ==0) Lot=StartLot; // если советник работает в режиме мартингейл и профит больше ноля // то лот сделаем равным стартовому для позиции в том же направлении if (Pro<0 && TypTrade ==1) Lot=StartLot; // если советник работает в режиме антимартингейл и профит меньше ноля // то лот сделаем равным стартовому для позиции в том же направлении // Для первого ордера if(Typ==0 && Lot==0 && Pro==0) // если нам из истории ордеров по нашему меджик номеру вернулись нули // значит нужно ткрыть первый ордер if(openorders(StartPoz,StartLot)) // если первы ордер открыт if(modify())return; // модифицируем его и в случае успешной модификации передадим управление терминалу if(Typ==BUY && Lot!=0 && Pro>0) // если последний закрытый ордер был на покупку и его профит больше нуля if(openorders(BUY,Lot*ALot)) // откроем ордер на покупку лотом в зависимости от типа TypTrade if(modify())return; // модифицируем его и в случае успешной модификации передадим управление терминалу if(Typ==BUY && Lot!=0 && Pro<0) // если последний закрытый ордер был на покупку и его профит меньше нуля if(openorders(SEL,Lot*MLot)) // откроем ордер на пр одажу лотом в зависимости от типа TypTrade if(modify())return; // модифицируем его и в случае успешной модификации передадим управление терминалу if(Typ==SEL && Lot!=0 && Pro>0) // если последний закрытый ордер был на продажу и его профит больше нуля if(openorders(SEL,Lot*ALot)) // откроем ордер на пр одажу лотом в зависимости от типа TypTrade if(modify())return; // модифицируем его и в случае успешной модификации передадим управление терминалу if(Typ==SEL && Lot!=0 && Pro<0) // если последний закрытый ордер был на продажу и его профит меньше нуля if(openorders(BUY,Lot*MLot)) // откроем ордер на покупку лотом в зависимости от типа TypTrade if(modify())return; // модифицируем его и в случае успешной модификации передадим управление терминалу } else return ; // если ордера есть то передадим управление терминалу }
1 - Просто будет выход из функции..
2 - Это проверка на то был ли у нас ордер, так как для работы советника мы должны вернуть данные закрытого ордера и работать с ними, а если это первый запуск советника и ордеров не было ...
3 - Мне так удобней, путаницы нет ...
Например, после трех увеличений (0,01,0,02,0,05).
Например, после трех увеличений (0,01,0,02,0,05).
Никак, это просто описание принципов Мартингейла общего и анти мартингейла...
Но добавить код можно, он не сложный ...
А как можно сбрасывать время от времени счётчик ордеров? Допустим, каждую неделю начинать новую серию как если бы советник начинал работу с самого начала, или при прошествии другого заданного временного интервала? Вот отработал советник, скажем, дня два-три без перерывов на обед и ужин, если повезло - не слил, но он продолжает работать по начальному сценарию, то есть уже не действует выбор направления первой сделки из настроек, так как первая сделка уже есть в истории сделок и он принимает в счёт только предыдущую, а там выбор - по алгоритму.
Я это к чеиу, просто я попытался ввести автоматический вход в первую сделку по случайным числам, а в остальных случаях оставил как было в оригинале. Но время от времени хорошо бы менять направление первой слеоки, а для этого нужно как-то указать советнику, что настало время сбросить счётчик...
Была попытка сделать вход во всех случаях по ГСЧ, но советник сделался слишком непредсказуем, параметры в тестере уже не подобрать, так как в следующий запуск результат не повторится.
А как можно сбрасывать время от времени счётчик ордеров? Допустим, каждую неделю начинать новую серию как если бы советник начинал работу с самого начала, или при прошествии другого заданного временного интервала? Вот отработал советник, скажем, дня два-три без перерывов на обед и ужин, если повезло - не слил, но он продолжает работать по начальному сценарию, то есть уже не действует выбор направления первой сделки из настроек, так как первая сделка уже есть в истории сделок и он принимает в счёт только предыдущую, а там выбор - по алгоритму.
Я это к чеиу, просто я попытался ввести автоматический вход в первую сделку по случайным числам, а в остальных случаях оставил как было в оригинале. Но время от времени хорошо бы менять направление первой слеоки, а для этого нужно как-то указать советнику, что настало время сбросить счётчик...
Была попытка сделать вход во всех случаях по ГСЧ, но советник сделался слишком непредсказуем, параметры в тестере уже не подобрать, так как в следующий запуск результат не повторится.
Мне немного не понятно чего вы хотите добиться или что хотите сделать ???
смысл останавливать советник через время ?
А как можно сбрасывать время от времени счётчик ордеров? Допустим, каждую неделю начинать новую серию как если бы советник начинал работу с самого начала, или при прошествии другого заданного временного интервала? Вот отработал советник, скажем, дня два-три без перерывов на обед и ужин, если повезло - не слил, но он продолжает работать по начальному сценарию, то есть уже не действует выбор направления первой сделки из настроек, так как первая сделка уже есть в истории сделок и он принимает в счёт только предыдущую, а там выбор - по алгоритму.
Я это к чеиу, просто я попытался ввести автоматический вход в первую сделку по случайным числам, а в остальных случаях оставил как было в оригинале. Но время от времени хорошо бы менять направление первой слеоки, а для этого нужно как-то указать советнику, что настало время сбросить счётчик...
Была попытка сделать вход во всех случаях по ГСЧ, но советник сделался слишком непредсказуем, параметры в тестере уже не подобрать, так как в следующий запуск результат не повторится.
Мне немного не понятно чего вы хотите добиться или что хотите сделать ???
смысл останавливать советник через время ?
Не останавливать а заставлять его сначала начинать. Если его просто остановить и снова запустить на том счёте, он не начнёт сначала, а с последнего закрытого ордера, нет?
Сделал пока так, может прокатит:
if((TimeCurrent()-OrderCloseTime()) > (delay*3600)) {Typ=10;Lot=0;Pro=0;} //перед условием для открытия первой позиции

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
VR---Overturn:
Author: Владимир