Полуавтоматический безиндикаторный советник "Сетка"

  • Автор темы Автор темы cmillion
  • Дата начала Дата начала

Andrey777

Интересующийся
Дайте пожалуйста set. для оптимизации версии Setka Limit Loc v2.
 

cmillion

Гуру форума
Для желающих проверить систему руками

В приложении к посту советник, закрывающий ордера по суммарному профиту и скрипт открывающий любое сочетание отложенных ордеров.
Для проверки этой сеточной сратегии думаю этого вполне достаточно.

Тактика проста:

1 ставите советник CloseProfit задаете ему нужный уровень профита, например:

ProfitClose = 10 usd

И он будет закрывать все ордера при достижении профита в 10$ При этом будет удалять все отложки

Параметры:

PHP:
extern double ProfitClose     = 10;   //закрывать все ордера при получении профита в валюте депозита
extern double LossClose       = 1000; //закрывать все ордера при получении убытка
extern bool   AllSymbol       = false;//учитывать все инструменты или только тот, на котором стоит советник
extern int    Magic           = 0;    //0 - учитывать все ордера (с любым Magic номером)



2 кидаете скрипт cm_script_OpenGread

Выставляете нужную систему отроженных ордеров и ждете закрытия, потом все с ноля.

PHP:
extern datetime TimeSet        = D'2011.12.10 17:47'; //Время выставления ордеров, если текущее время больше установленного, то выставляются сразу
extern bool     Stop           = true;     //открыть стоп ордера
extern bool     Limit          = true;     //открыть лимитные ордера
extern bool     SELL           = true;     //открыть ордера SELL
extern bool     BUY            = true;     //открыть ордера BUY
extern string   __             = "";
extern double   FirstBuyStop   = 0;        //цена выставления первого BuyStop ордера, если 0 то первый BuyStop будет выставлен по цене Ask+FirstStop
extern double   FirstSellStop  = 0;        //цена выставления первого SellStop ордера, если 0 то первый SellStop будет выставлен по цене Bid-FirstStop
extern double   FirstBuyLimit  = 0;        //цена выставления первого BuyLimit ордера, если 0 то первый BuyLimit будет выставлен по цене Bid-FirstStop
extern double   FirstSellLimit = 0;        //цена выставления первого SellLimit ордера, если 0 то первый SellLimit будет выставлен по цене Ask+FirstStop
extern int      FirstStop      = 100;      //расстояние (в пунктах) от текущей цены до первого Stop ордера в случае First..Stop=0 
extern int      FirstLimit     = 50;       //расстояние (в пунктах) от текущей цены до первого Limit ордера в случае First..Limit=0
extern int      StepStop       = 30;       //расстояние (в пунктах) между Stop ордерами
extern double   K_StepStop     = 1;        //коэффициент расширения сетки
extern int      StepLimit      = 30;       //расстояние (в пунктах) между Limit ордерами
extern double   K_StepLimit    = 1;        //коэффициент расширения сетки
extern string   _              = "";
extern int      Orders         = 5;        //кол-во ордеров сетки
extern double   LotStop        = 0.5;      //объем первого Stop ордера
extern double   K_LotStop      = 1;        //умножение лота Stop ордеров 
extern double   Plus_LotStop   = 0;        //добавление лота Stop ордеров 
extern double   LotLimit       = 0.1;      //объем первого Limit ордера
extern double   K_LotLimit     = 2;        //умножение лота Limit ордеров
extern double   Plus_LotLimit  = 0;        //добавление лота Limit ордеров
extern int      stoploss       = 50;       //уровень выставления SL, если 0, то SL не выставляется
extern int      takeprofit     = 100;      //уровень выставления TP, если 0, то TP не выставляется
extern int      Expiration     = 1440;     //Срок истечения отложенного ордера в минутах, если 0, то срок не ограничен (1440 - сутки)
extern int      attempts       = 10;       //кол-во попыток открытия ордера 
extern int      Magic          = 0;        //уникальный номер ордера

И не нужно ждать никакого коннекта!
Есть и другие скрипты с другим, более простым сочетанием ордеров, если нужно выложу и их.

Удачной торговли!
 

Вложения

Последнее редактирование:

alekgordie

Активный участник
Подскажите, как расчитать лот в процентах от депозита.
Спасибо!
 

Olvimaik

Местный знаток
Я вообще-то человек не публичный и не люблю выкладывать свои советники, но раз пошла такая пьянка, я за пять минут "смастрачил" из выложенного скрипта и советника уважаемого Cmillion вот такую штуку:
Посмотреть вложение Grid_Profit_Cmillion.mq4
Grid по-английски - сетка.
Оставлены все ссылки на правообладателя и автора Cmillion.
Думаю, он не будет на меня в обиде.
Зато теперь можно тестировать на истории на полном автомате сколько угодно и взахлеб искать пресловутый "грааль".
 

gush

бродяга
Я вообще-то человек не публичный и не люблю выкладывать свои советники, но раз пошла такая пьянка, я за пять минут "смастрачил" из выложенного скрипта и советника уважаемого Cmillion вот такую штуку:
Посмотреть вложение 106030
Grid по-английски - сетка.
Оставлены все ссылки на правообладателя и автора Cmillion.
Думаю, он не будет на меня в обиде.
Зато теперь можно тестировать на истории на полном автомате сколько угодно и взахлеб искать пресловутый "грааль".

то, что нужно, спасибо дружище..
только тестится долго.. есть спецы по улучшению быстроты тестирования?
 

Olvimaik

Местный знаток
то, что нужно, спасибо дружище..
только тестится долго.. есть спецы по улучшению быстроты тестирования?
Для этого надо отключить все комманды Comment, Alert и ObjectSetText.
В разы тормозят тестирование все команды вывода на экран.
Можно с этого начать изучать mql4.
Подсказка - такие строки надо найти и закомментить, поставив в начале строки два символа //
 

Картман

Активный участник
не рекомендовал бы вам тестировать и тем более уж оптимизировать то что тут как атс преподнесено, если Владимир решит таки сам сову накидать тогда иное дело, а то что есть глюком на глюке погоняет.
 

Картман

Активный участник
Для этого надо отключить все комманды Comment, Alert и ObjectSetText.
В разы тормозят тестирование все команды вывода на экран.
Можно с этого начать изучать mql4.
Подсказка - такие строки надо найти и закомментить, поставив в начале строки два символа //

Да и вообще имеет смысл перебрать весь код,
2013.02.10 20:06:29 2012.02.01 17:22 Grid_Profit_Cmillion GBPUSD,M5: OrderSend error 4107
и тд и тп, прям вот даже 131_ю увидел.
Владимир если не затруднит, накидайте легкую атс с защитой от дурака (проверка ордеров)
 

cmillion

Гуру форума
cm-NEW_SSetka 1.1

1) выставляем BuyStop и SellStop на расстоянии FirstStop от текущей цены. (Buystop от цены Ask SellStop от цены Bid)
2) Если цена пошла вверх то ордер SellStop тралится за ценой на расстоянии FirstStop с шагом StepTrall
3) Как только срабатывает ордер BuyStop выставляются ордера BuyLimit на расстоянии (StepLimit х K_StepLimit) в кол-ве N_BuyLimit шт.
Т.е. каждое последующее расстояние увеличивается на коэффициент K_StepLimit
При этом выставляется сетка BuyStop ордеров с шагом (StepStop х K_StepStop) в кол-ве N_BuyStop шт.
4) Закрытие ордеров происходит
a) по ProfitClose в валюте депозита.Закрывать все ордера при получении профита по сумме всех ордеров данной валютной пары.
б) по ProfitCloseBuy в валюте депозита.Закрывать все ордера направления BUY при получении профита по ордерам направления BUY
с) по ProfitCloseSell в валюте депозита.Закрывать все ордера направления SELL при получении профита по ордерам направления SELL
к пунктам б и с добавляется условие OppositeOrdersClose (закрываем дальний противоположный ордер совместно с профитом направления,
если кол-во противоположных ордеров достигло OppositeOrdersClose)


PHP:
extern string макс_кол_во_ордеров  = "";
extern int    N_BuyLimit           = 10;     //разрешить сделки BuyLimit в кол-ве
extern int    N_BuyStop            = 30;     //разрешить сделки BuyStop в кол-ве
extern int    N_SellLimit          = 10;     //разрешить сделки SellLimit в кол-ве
extern int    N_SellStop           = 30;     //разрешить сделки SellStop в кол-ве

extern string _ = "";
extern int    FirstStop          = 20;       //(пипс) расстояние до первого Stop ордера
extern int    StepTrall          = 2;        //(пипс) шаг тралла - перемещать стоп ордер не ближе чем StepTrall
extern int    FirstLimit         = 20;       //(пипс) расстояние до первого Limit ордера

extern string __ = "";
extern int    StepLimit          = 30;       //(пипс) расстояние между Limit ордерами
extern double K_StepLimit        = 1.5;      //множитель шага Limit ордеров

extern string ___ = "";
extern int    StepStop           = 30;       //(пипс) расстояние между Stop ордерами
extern double K_StepStop         = 1.0;      //множитель шага Stop ордеров

extern string ____ = "";
extern double LotStop            = 0.1;      //первый лот Stop ордера
extern double PlusLotStop        = 0.1;      //прибавка к лоту последующего ордера
extern double K_LotStop          = 1.0;      //коэффициент увеличения лота последующего ордера
extern double MaxIncreasesStop   = 100;      //максимально возможный лот, если по рссчету лот получается больше, то выставляем ордер лотом = MaxIncreasesLimit

extern string _____ = "";
extern double LotLimit           = 0.2;      //первый лот Limit ордера
extern double PlusLotLimit       = 0.1;      //прибавка к лоту последующего ордера
extern double K_LotLimit         = 1.5;      //коэффициент увеличения лота последующего ордера      
extern double MaxIncreasesLimit  = 100;      //максимально возможный лот, если по рссчету лот получается больше, то выставляем ордер лотом = MaxIncreasesLimit

extern string ______ = "";
extern int    OrderAllClose      = 15;       //(шт) закрывать ордера только по общему профиту, если общее кол-во ордеров достигло OrderAllClose
extern double ProfitClose        = 0;        //(валюта депозита)закрывать все ордера при получении профита, если 0 то расчет по Koeff_Profit
extern double Koeff_Profit       = 1.0;      //коэффициент ProfitClose = ProfitClose * Koeff_Profit
extern double Koeff_ProfitBuy    = 1.5;      //коэффициент ProfitClose = ProfitClose * Koeff_Profit
extern double Koeff_ProfitSell   = 1.5;      //коэффициент ProfitClose = ProfitClose * Koeff_Profit
extern double ProfitCloseBuy     = 0.0;      //(валюта депозита)закрывать все ордера направления BUY при получении профита по ордерам направления BUY, если 0 - отключено
extern double ProfitCloseSell    = 0.0;      //(валюта депозита)закрывать все ордера направления SELL при получении профита по ордерам направления SELL, если 0 - отключено
extern int   OppositeOrdersClose = 10;       //закрываем дальний противоположный ордер совместно с профитом направления, если кол-во противоположных ордеров достигло OppositeOrdersClose

extern string _______ = "";
extern int    DigitsLot          = 1;        //округление ордеров 1- десятые 2 сотые
extern int    Magic              = 7000;
extern bool   DrawInfo           = true;     //вывод информации на экран
extern int    FontSize           = 12;       //размер шрифта
extern int    Corner             = 1;        //угол вывода информации
extern color  TextColor          = Aqua;     //цвет вывода информации
extern color  Plus               = Lime;
extern color  Minus              = Red;
extern color  Null               = Aqua;

extern string Filter_Time        = "";
extern int    TimeStart          = 0 ,    //ограничение времени работы советника
              TimeEnd            = 24,    //не открываем ордера и закрываем отложки если время не между TimeStart и TimeEnd
              FridayHourClose    = 18;    //час закрытия ордеров в пятницу
 

Вложения

Последнее редактирование модератором:

Olvimaik

Местный знаток
Да и вообще имеет смысл перебрать весь код,
2013.02.10 20:06:29 2012.02.01 17:22 Grid_Profit_Cmillion GBPUSD,M5: OrderSend error 4107
и тд и тп, прям вот даже 131_ю увидел.
Владимир если не затруднит, накидайте легкую атс с защитой от дурака (проверка ордеров)
Вот тут коды ошибок:
_docs.mql4.com/ru/constants/errors

Например, 131 - Неправильный объем
а 4107 - Неправильный параметр цены для торговой функции.

P.S. Вот поэтому я никогда не выкладываю свои советники.
Тут же какой-нибудь дурак, тупо задающий неправильные параметры, в дураки норовит записать.
 
Последнее редактирование:

cmillion

Гуру форума
Расскажите о последней вашей сетке Setka Limit Loc v8d ?

Давно не заглядывал в ветку, если брать именно эту версию, то вот параметры советника:

PHP:
extern double ProfitStartTrall      = 0;  //закрывать все ордера при получении профита
extern double Koeff_Profit          = 0.3;//коэффициент ProfitStartTrall = ProfitStartTrall * ProfitStartK
extern double TrailingPercentProfit = 30; //если 0 то ордера закрываются по ProfitStartTrall иначе они тралятся, (% от прибыли)
extern int    TakeProfit            = 0; //тейкпрофит от общего безубытка
extern int    LocProfit             = 0; //профит общего закрытия после включения локов  (в валюте депозита)
extern string _               = "";
extern bool   Buy             = true;     //разрешить сделки Buy
extern bool   Sell            = true;     //разрешить сделки Sell
extern string __              = "";
extern int    OrdersLimit     = 20;       //максимальное колличество Limit ордеров (не более 99)
extern int    OrdersStop      = 0;        //максимальное колличество Stop ордеров  (не более 99)
extern string ___             = "";
extern double lotLimit        = 0.1;      //первый лот лимит ордеров, если 0, то % от депозита risk Limit
extern double riskLimit       = 1;        //процент от депозита для определения лота
extern double lotStop         = 0.1;      //первый лот стоп ордеров, если 0, то % от депозита riskStop 
extern double riskStop        = 5;        //процент от депозита для определения лота
extern double PlusLotStop     = 0.0;      //добавка к последующим лотам
extern double PlusLotLimit    = 0.0;      //добавка к последующим лотам
extern double K_LotStop       = 2.0;      //умножение следующих лотов Stop
extern double K_LotLimit      = 2.0;      //умножение следующих лотов Limit
extern int    DigitsLot       = 2;        //округление ордеров 1- десятые (0.1)  2 сотые (0.01)
extern int    MaxLot          = 100;      //Советник не может выставить лот более MaxLot

extern string ____            = "";
extern int    MoveStepGread   = 10;       //шаг перемещения сетки, если 0 не перемещается (работает только при односторонней сетке)
extern int    FirstStepLimit  = 10;       //первый шаг Limit ордеров от текущей цены
extern int    FirstStepStop   = 50;       //первый шаг Stop ордеров от последнего Limit ордера
extern int    StepLimit       = 10;       //расстояние между ордерами, если =0 то автоподстройка сетки под цену
extern int    StepStop        = 20;       //расстояние между ордерами
extern double K_StepLimit     = 1;        //коэффициент изменения расстояния между LIMIT ордерами
extern double K_StepStop      = 1;        //коэффициент изменения расстояния между STOP ордерами

extern int    Stretching      = 5;        //с какого ордера Использовать растяжение сетки, если 0 то растяжения нет.!!!!!!!!!!!!
extern int    StepStretch     = 20;       //расстояние между ордерами после начала работы функции Stretching !!!!!!!!!!!
extern double K_StepStretch   = 1.3;      //коэффициент изменения расстояния между  ордерами растяжения !!!!!!!!!
extern int    MaxPips         = 100;      //Ставить ордера не далее от текущей цены (измеряется в пипсах)

extern string _____           = "";
extern int    SLossLimit      = 0;        //стоплосс Limit ордеров 
extern int    TProfitLimit    = 0;        //тейкпрофит (если -1 то TP=Step)  Limit ордеров 
extern int    SLossStop       = 0;        //стоплосс Stop ордеров 
extern int    TProfitStop     = 0;        //тейкпрофит (если -1 то TP=Step) Stop ордеров 
extern int    NoLoss          = 0;        //перевод в безубыток при превышении ценой заданного кол-ва пунктов от точки общего безубытка
extern int    MinProfitNoLoss = 1;        //минимальный профит при переводе в безубыток 
extern double TrailingPercentStep   = 0;  //тралл отдельных ордеров (без общего безубытка) задается в процентах от сетки 

extern string  ___________________ = "";
extern int    SleepTime       = 0;        //таймаут после закрытия ордеров в минутах
extern int    magic           = 1000;
extern double Diapazon        = 1.0;      //коэффициент расширения сетки

extern string  _____________________ = "";
extern bool    TrailingOn           = false;     //вкл/откл окно трейлинг отдельных направлений по пунктам
extern string  parameters.trailing  = "1-Candle  2-Fractals  3-ATR  >3-pips";
extern int     trailingStop         = 1;      // тралл, если "0-off  1-Candle  2-Fractals 3-ATR >3-pips";
extern int     TF_Tralling          = 5;      // таймфрейм свечей или фракталов для тралла
extern int     deltaTralling        = 0;      // отступ от фрактала или свечи при определении стоплосса. (offset from the fractal or candles)
extern int     StepTralling         = 1;      // шаг - перемещать стоплосс не ближе чем Step (step Thrall, moving not less than Step n )
extern int     period_ATR           = 14;     // период ATR для трейлинга  

extern string  __________________   = "";
extern bool   AlertOn               = true;     //вкл/откл окно Alert
extern bool   SendMailInfo          = false;    //отправка информации на почту
extern bool   DrawInfo              = true;     //вывод информации на экран
extern int    font_size             = 10;       //размер шрифта
extern int    Corner                = 1;        //угол вывода информации
extern color  text_color            = Lime;     //цвет вывода информации

extern string фильтр.по.времени  = "";
extern string Monday             = "";     //пн
extern int    TimeStartMonday    = 0 ,       //ограничение времени работы советника
              TimeEndMonday      = 24;       //не открываем ордера и закрываем отложки если время не между TimeStart и TimeEnd
extern string Tuesday            = "";     //вт
extern int    TimeStartTuesday   = 0 ,       //ограничение времени работы советника
              TimeEndTuesday     = 24;       //не открываем ордера и закрываем отложки если время не между TimeStart и TimeEnd
extern string Wednesday          = "";     //ср
extern int    TimeStartWednesday = 0 ,       //ограничение времени работы советника
              TimeEndWednesday   = 24;       //не открываем ордера и закрываем отложки если время не между TimeStart и TimeEnd
extern string Thursday           = "";     //чт
extern int    TimeStartThursday  = 0 ,       //ограничение времени работы советника
              TimeEndThursday    = 24;       //не открываем ордера и закрываем отложки если время не между TimeStart и TimeEnd
extern string Friday             = "";     //пт
extern int    TimeStartFriday    = 0 ,       //ограничение времени работы советника
              TimeEndFriday      = 10;        //не открываем ордера и закрываем отложки если время не между TimeStart и TimeEnd

extern int    NoLossLoc          = 20;     //переводить лок ордера в безубыток при превышении ценой заданного кол-ва пунктов от точки открытия ордера (0- отключено)
extern int    MinPipsLoc         = 10;       //не ставить лок ордера ближе этого значения от цены (а пипсах)

По параметрам должно быть более менеее все понятно.
Само описание стратегии делал в ветке форума ***, ссылки запрещены, поэтому смогу дать ссылку только по почте или скайпу.
 
Последнее редактирование модератором:

ccm

Новичок форума
Olvimaik, спасибо за автоматизацию скриптов уважаемого cmillion. Если не ошибаюсь, сетки Стоп и Лимит должны открываться разным количеством ордеров. В настройках только один параметр Orders = 5; //кол-во ордеров сетки Буду признателен, если пропишите в настройках возможность установки сеток Стоп и Лимит разным количеством ордеров. В любом случае благодарю.
 

Olvimaik

Местный знаток
По просьбе трудящихся введены:
Раздельное выставление количества стоп и лимит ордеров
extern int Orders_Stop = 5; //кол-во стоп ордеров сетки
extern int Orders_Limit = 5; //кол-во лимит ордеров сетки

Отключение комментов и алертов для ускорения тестирования
extern bool Comment_ON = FALSE;
extern bool Alert_ON = FALSE;
Посмотреть вложение Grid_Profit_Cmillion v1.1.mq4
 

strannik-ps

VIP-участник
И все сосиски сожрал :-)

Здравствуй Володя!
Приветствую всех остальных!
Проблема в тестировании решить легко замените || на * и в конце пропишите Action; и все ну и значение, в чем проблема? элементарная математика начальных классов.
 

cmillion

Гуру форума
Olvimaik, спасибо за автоматизацию скриптов уважаемого cmillion. Если не ошибаюсь, сетки Стоп и Лимит должны открываться разным количеством ордеров. В настройках только один параметр Orders = 5; //кол-во ордеров сетки Буду признателен, если пропишите в настройках возможность установки сеток Стоп и Лимит разным количеством ордеров. В любом случае благодарю.

Разделил для Вас параметры

PHP:
extern int      OrdersStop     = 5;        //кол-во ордеров Stop сетки
extern int      OrdersLimit    = 5;        //кол-во ордеров Limit сетки
 

Вложения

Верх