Довести до ума

 

Добрый день, уважаемые форумчане!

Нашел советника, который мне показался перспективным, но накинув его на разные графики обнаружил кучу костылей (не на всех парах работает и не всегда корректно открывает/удаляет ордера + трал косячный). 

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

Помогите поправить код. Сам пытался, но понял, что в этом деле полный ноль((

//+------------------------------------------------------------------+

extern int    MagicNumber = 123456;
extern double min_lot = 0.01;
extern double max_lot = 10;
extern double risk = 50;         //процент используемых свободных средств
extern double DIF = 0.0011;      //отступ для выставления ордеров
extern double SL = 0.0025;       //StopLoss
extern double TP = 0.0025;       //TakeProfit
extern double TS = 0.00015;      //TrailingStop
extern double DTS = 0.0009;      //Минимальный профит для включения TrailingStop

//-- GlobalVariable
//double lot;
double pdb;
double pds;
string sym;
bool   exposed=false;

double calc_lot (string _sym){        //Calculate Lot size
   double _templ;
   _templ = AccountFreeMargin()*(risk/100)/(MarketInfo(_sym, MODE_BID)*1000);
   _templ = NormalizeDouble (_templ, 3);
   if (_templ < min_lot) _templ = min_lot;
   if (_templ > max_lot) _templ = max_lot;
   return (_templ);
}

void DeleteOrder (){                   // Delete Open Stop Orders
   int _total=OrdersTotal();
   for(int _pos=0;_pos<_total;_pos++){
      OrderSelect(_pos, SELECT_BY_POS, MODE_TRADES);
      if (OrderType()>1 && OrderMagicNumber() == MagicNumber)
         OrderDelete(OrderTicket());          
   }
}

int OpenOrderBuy (string _sym, double _lot, double _DIF, double _SL, double _TP){
   double _max, _prb;
   _max = iHigh(_sym,PERIOD_D1,1);
   _prb = NormalizeDouble(_max,6)+_DIF;
   return (OrderSend(_sym, OP_BUYSTOP, _lot, _prb, 5, _prb-_SL, _prb+_TP, "" ,MagicNumber, 0, Red));
}

int OpenOrderSell (string _sym, double _lot, double _DIF, double _SL, double _TP){
   double _min, _prs;
   _min = iLow(_sym,PERIOD_D1,1);
   _prs = NormalizeDouble(_min,6)-_DIF;
   return (OrderSend(_sym, OP_SELLSTOP, _lot, _prs, 5, _prs+_SL, _prs-_TP, "" ,MagicNumber, 0, Red));
}

int start(){
   sym = Symbol();
   if (Hour()==0 && exposed == false){
     double lot = calc_lot(sym);
     DeleteOrder();
     OpenOrderBuy (sym, lot, DIF, SL, TP);
     OpenOrderSell (sym, lot, DIF, SL, TP);
     exposed = true;
   }
   if (Hour()==23) exposed = false;
   int total=OrdersTotal();
   for(int pos=0;pos<total;pos++){
      OrderSelect(pos, SELECT_BY_POS, MODE_TRADES);
      if (OrderType()==0 && OrderMagicNumber() == MagicNumber){     //ордера на покупку
         if (OrderOpenPrice()<(Bid-DTS)){
            double db = Bid - OrderOpenPrice();
            double tslb = Bid - OrderStopLoss();
            if (tslb>TS && db>TS){
               OrderModify(OrderTicket(),OrderOpenPrice(),(Bid-TS),OrderTakeProfit(),0,Blue);
            }
         }
      }
      if (OrderType()==1 && OrderMagicNumber() == MagicNumber){     //ордера на продажу
         if (OrderOpenPrice()>(Ask-DTS)){
            double ds = OrderOpenPrice()-Ask;
            double tsls = OrderStopLoss()-Ask;
            if (tsls>TS && ds>TS){
               OrderModify(OrderTicket(),OrderOpenPrice(),(Ask+TS),OrderTakeProfit(),0,Blue);
            }
         }
      }
   }
   return(0);
}
//+------------------------------------------------------------------+
 
Yuriy Kuzmin:

Добрый день, уважаемые форумчане!

Нашел советника, который мне показался перспективным, но накинув его на разные графики обнаружил кучу костылей (не на всех парах работает и не всегда корректно открывает/удаляет ордера + трал косячный). 

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

Помогите поправить код. Сам пытался, но понял, что в этом деле полный ноль((

А можно поинтересоваться как он показался перспективным если имеет кучу костылей, не на всех парах работает даже с костылями и ... аж страшно сказать, от фонаря открывает/закрывает... Может так и оставить его если он такой перспективный? А то исправишь, а он начнёт сливать как в канализацию...

 
Alexey Viktorov:

А можно поинтересоваться как он показался перспективным если имеет кучу костылей, не на всех парах работает даже с костылями и ... аж страшно сказать, от фонаря открывает/закрывает... Может так и оставить его если он такой перспективный? А то исправишь, а он начнёт сливать как в канализацию...

на тестах при оптимизации показывает НЕПЛОХОЙ результат. Но только на евре/долларе.

 
Yuriy Kuzmin:

не на всех парах работает и не всегда корректно открывает/удаляет ордера + трал косячный 

Пробуй, работает на всех парах.

Файлы:
Ind.mq4  7 kb
 
FXwin:

Пробуй, работает на всех парах.

Супер! Спасибо!

Открывает везде - проверил.

Но эта гадина теперь стопы и тейки ставит на уровне открытия ордера...))) 

 
Yuriy Kuzmin:  на тестах при оптимизации показывает НЕПЛОХОЙ результат. Но только на евре/долларе.

Нашел перспективную стратегию. Скачал с маркета около 50 демонстрационных версий по этой тематике. Выбрал один - увеличивал депозит за 1 день 11 января 2017 года в тысячи раз. Изучил отчет и укрепился в выбранном направлении. Написал десяток своих вариантов - один прилагаю - оцените перспективность. Депозит задавайте 100$ и даты в 2017 году. Там параметр ММ = при превышении определенной величины депозита прекращает торговлю и выходит.

Один вариант в тестере за 1 указанный день из 40 долларов делает миллион. В тестере за 2018 год сделал из 40 долларов 7 миллионов и заткнулся на полпути - мало памяти.

Поставил на ECN демо - за день почти удваивает. Ставлю на ECN реал того же брокера и одновременно на на ECN демо. На реале спред в 2 раза меньше. Сравниваем результаты за четверг 29 марта 2018 года

    Тиковые графики разные...

На демо 182 сделки +18.08 - 8.93 = +9.15 прибыли      На реале 167 сделок +13.07 - 20.67 = -7.60 убыток. Может был день плохой?

Файлы:
-3-007.ex4  14 kb
 
STARIJ:

Нашел перспективную стратегию. Скачал с маркета около 50 демонстрационных версий по этой тематике. Выбрал один - увеличивал депозит за 1 день 11 января 2017 года в тысячи раз. Изучил отчет и укрепился в выбранном направлении. Написал десяток своих вариантов - один прилагаю - оцените перспективность. Депозит задавайте 100$ и даты в 2017 году. Там параметр ММ = при его превышении определенной величины депозита прекращает торговлю и выходит.

Один вариант в тестере за 1 указанный день из 40 долларов делает миллион. В тестере за 2018 год сделал из 40 долларов 7 миллионов и заткнулся на полпути - мало памяти.

Поставил на ECN демо - за день почти удваивает. Ставлю на ECN реал того же брокера и одновременно на на ECN демо. На реале спред в 2 раза меньше. Сравниваем результаты за четверг 29 марта 2018 года

    Тиковые графики разные...

На демо 182 сделки +18.08 - 8.93 = +9.15 прибыли      На реале 167 сделок +13.07 - 20.67 = -7.60 убыток. Может был день плохой?

Нужно не на ЕCN проверять, а на STP или NDD, где нет комиссии, а только спред

 
Vitaly Muzichenko:   Нужно не на ЕCN проверять, а на STP или NDD, где нет комиссии, а только спред