Советник, icustom и индикатор

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

viwm

Новичок форума
не хватает индюка, пишет:
Cannot open file 'E:\MetaTrader - E-Global Trade & Finance Group\MetaTrader - E-Global Trade & Finance Group\experts\indicators\PBF_Scalper_Show_Me.ex4' on the GBPUSD,H1

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

Индикатор PBF_Scalper_Show_Me.ex4 при анализе пока не используется, записан лишь при объявлении для подключения индикатора в советнике через iCUstom(),поэтому можно его закомментировать. Советник сейчас использует только индикатор buy_sell_alerts, остальные подключены, но при тестировании роли не играют.
Индикатор PBF_Scalper_Show_Me.ex4 вечером выложу
 

Warstep

Местный житель
Индикатор PBF_Scalper_Show_Me.ex4 при анализе пока не используется, записан лишь при объявлении для подключения индикатора в советнике через iCUstom(),поэтому можно его закомментировать. Советник сейчас использует только индикатор buy_sell_alerts, остальные подключены, но при тестировании роли не играют.
Индикатор PBF_Scalper_Show_Me.ex4 вечером выложу

посмотри алгоритм выставления ордеров в этой сове, может что "понравится"

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

Посмотреть вложение Forex Profit Collector.ex4
 
  • Like
Реакции: viwm

viwm

Новичок форума
посмотри алгоритм выставления ордеров в этой сове, может что "понравится"

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

Посмотреть вложение 112376

Есть некоторые функции, которые можно попробовать использовать. Удаление сразу ненужных ордеров может к чему-то и приведет.

Здесь обновленный архив с советником и ещё с одним индикатором Pbf_scalper_show_me.
 

Вложения

Warstep

Местный житель
смущает что флет ни как не игнорится из-за чего происходит наращивание лота и вследствии прибыльность падает, что бы выдержать риски
может какой еще индюк флета прикрутить, а то советник всегда в рынке, как то выглядит не всегда правильно
 
  • Like
Реакции: viwm

viwm

Новичок форума
смущает что флет ни как не игнорится из-за чего происходит наращивание лота и вследствии прибыльность падает, что бы выдержать риски
может какой еще индюк флета прикрутить, а то советник всегда в рынке, как то выглядит не всегда правильно
Да над этим нужно ещё поработать, пока вариантов не нашел.
В функции OpenOrder количество открываемых сделок зависит от числа k. Пока не достигнет этого числа, так и будет открывать ордера бесконечно, и при том если заполнено, при открытых этих ордерах нельзя открыть другой.
Как можно сделать, чтобы не зависело от числа k и открывал 1 сделку.

PHP:
Expand Collapse Copy
#include <WinUser32.mqh>
#property show_inputs

extern int     stoploss    = 0,    
               takeprofit  = 0,        
               Magic       = 123456; 
bool    SELL        = false,    
           BUY         = false;    
extern double  Lot         = 0.01;
extern int     slippage    = 3;     
double SL,TP;
double uni_cross_up;
double uni_cross_down;
double flat_up;
double flat_down;
double flat_flat;

void OPENORDER(string ord)
{
      int k=OrdersTotal();
      //k-количество открытых ордеров, ставим 10 - откроет 10 одинаковых сделок
      if (k<4)
      {    
        //getLots() - включаем мартин для лота
        if (ord=="Buy" ) OrderSend(Symbol(),OP_BUY, /*Lot*/ getLots(),NormalizeDouble(Ask,Digits),slippage,SL,TP,"BUY",Magic,0,Blue);
        if (ord=="Sell") OrderSend(Symbol(),OP_SELL,/*Lot*/ getLots(),NormalizeDouble(Bid,Digits),slippage,SL,TP,"SELL",Magic,0,Red);
         
      
      } 
return(0);
}                  

int init() 
  { 
//---- 
    
//---- 
   return(0); 
  }
   
//+------------------------------------------------------------------+ 



//| expert deinitialization function                                 | 
//+------------------------------------------------------------------+ 

int deinit() 
  { 
//---- 
    
//---- 
   return(0); 
  } 

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



//| expert start function                                            | 
//+------------------------------------------------------------------+ 
int start() 
  { 
   
   double arrow_up_blue1 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,0,0); 
   double arrow_up_blue2 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,0,1);
   double arrow_up_blue3 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,0,2);
   double arrow_up_blue4 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,0,3);
   double arrow_up_blue5 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,0,4);
   
   double arrow_down_red1 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,1,0); 
   double arrow_down_red2 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,1,1);
   double arrow_down_red3 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,1,2);
   double arrow_down_red4 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,1,3);
   double arrow_down_red5 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,1,4);
   
   
   uni_cross_up  =iCustom(Symbol(),0, "uni_cross",0,7);
   uni_cross_down=iCustom(Symbol(),0, "uni_cross",1,7);
   
   flat_up=iCustom(Symbol(),0,"Pulse Flat",20,2.0,20,1.5,12,3,1);
   flat_down=iCustom(Symbol(),0,"Pulse Flat",20,2.0,20,1.5,12,2,1);
   flat_flat=iCustom(Symbol(),0,"Pulse Flat",20,2.0,20,1.5,12,4,1);
   Comment("flat_up=",flat_up," flat_down=",flat_down," flat=",flat_flat);

      if ((arrow_up_blue1>0)&&
         (arrow_up_blue2>0) && 
         (arrow_up_blue3>0) && 
         (arrow_up_blue4>0) &&
         (arrow_up_blue5>0) &&
         (arrow_down_red1==0) &&
         (arrow_down_red2==0) && 
         (arrow_down_red3==0) &&
         (uni_cross_up<10000000) &&
         (flat_up<0) &&
         (arrow_down_red5==0)) 
        
        {                
            SELL=false;
            BUY=true;
               
        }    
    
    
     
      if  ((arrow_down_red1>0) && 
          (arrow_down_red2>0) &&
          (arrow_down_red3>0) && 
          (arrow_down_red4>0) &&
          (arrow_down_red5>0) &&
          (arrow_up_blue1==0) &&
          (arrow_up_blue2==0) &&
          (arrow_up_blue3==0) && 
          (arrow_up_blue4==0) &&
          (uni_cross_down<1000000) &&
          (flat_down>0) &&
          (arrow_up_blue5==0)) 
       
      
       { 
            
            BUY=false;
            SELL=true;
                 
                      
       } 
       
   
//============Функции для открытия ордеров
  if (BUY)
  
   {     
//=======Закрываем ордера на продажу перед открытием на покупку=============
      for (int i=OrdersTotal()-1; i>=0; i--)
         {
            if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
            if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage);
         }
//============================================================================
   
   
      //if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
      //if (stoploss!=0)   SL  = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;     
      if (takeprofit!=0) TP=Ask+takeprofit*Point;
      if (stoploss!=0) SL=Ask-stoploss*Point;
      OPENORDER ("Buy");
   }
   
   if (SELL)
    {           
//=====Закрываем ордера на покупку перед открытием на продажу=====================================================
      for ( i=OrdersTotal()-1; i>=0; i--)
         {
            if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
            if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage);
         }
//=====================================================================================
      
      //if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
      //if (stoploss!=0)   SL = NormalizeDouble(Bid + stoploss*Point,Digits);  else SL=0;              
      if (takeprofit!=0) TP=Bid-takeprofit*Point;
      if (stoploss!=0) SL=Bid+stoploss*Point;
      OPENORDER ("Sell");
   }
  
      
//---- 
 
   return(0); 
  } 
    
  
     //Мартингейл
  //+--------------------------- getLots ----------------------------------+
 
   double getLots() 
   {
      double minlot = MarketInfo(Symbol(), MODE_MINLOT);
      int round = MathAbs(MathLog(minlot) / MathLog(10.0)) + 0.5;
      double result = Lot;
      int total = OrdersHistoryTotal();
      double spread = MarketInfo(Symbol(), MODE_SPREAD);
      // double k = (tp + sl) / (tp - spread);
   
      for (int i = 0; i < total; i++) 
         {
            OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
               if (OrderProfit() > 0) 
                  {
                     result = Lot;
                   } 
               else 
                  {
                     result = result * 2;
                  }
            
         }
   
      result = NormalizeDouble(result, round);
      double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
      if (result > maxlot) 
      {
         result = maxlot;
      }
   RefreshRates();
   return(result);
}
 

Warstep

Местный житель
Да над этим нужно ещё поработать, пока вариантов не нашел.
В функции OpenOrder количество открываемых сделок зависит от числа k. Пока не достигнет этого числа, так и будет открывать ордера бесконечно, и при том если заполнено, при открытых этих ордерах нельзя открыть другой.
Как можно сделать, чтобы не зависело от числа k и открывал 1 сделку.

PHP:
Expand Collapse Copy
#include <WinUser32.mqh>
#property show_inputs

extern int     stoploss    = 0,    
               takeprofit  = 0,        
               Magic       = 123456; 
bool    SELL        = false,    
           BUY         = false;    
extern double  Lot         = 0.01;
extern int     slippage    = 3;     
double SL,TP;
double uni_cross_up;
double uni_cross_down;
double flat_up;
double flat_down;
double flat_flat;

void OPENORDER(string ord)
{
      int k=OrdersTotal();
      //k-количество открытых ордеров, ставим 10 - откроет 10 одинаковых сделок
      if (k<4)
      {    
        //getLots() - включаем мартин для лота
        if (ord=="Buy" ) OrderSend(Symbol(),OP_BUY, /*Lot*/ getLots(),NormalizeDouble(Ask,Digits),slippage,SL,TP,"BUY",Magic,0,Blue);
        if (ord=="Sell") OrderSend(Symbol(),OP_SELL,/*Lot*/ getLots(),NormalizeDouble(Bid,Digits),slippage,SL,TP,"SELL",Magic,0,Red);
         
      
      } 
return(0);
}                  

int init() 
  { 
//---- 
    
//---- 
   return(0); 
  }
   
//+------------------------------------------------------------------+ 



//| expert deinitialization function                                 | 
//+------------------------------------------------------------------+ 

int deinit() 
  { 
//---- 
    
//---- 
   return(0); 
  } 

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



//| expert start function                                            | 
//+------------------------------------------------------------------+ 
int start() 
  { 
   
   double arrow_up_blue1 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,0,0); 
   double arrow_up_blue2 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,0,1);
   double arrow_up_blue3 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,0,2);
   double arrow_up_blue4 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,0,3);
   double arrow_up_blue5 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,0,4);
   
   double arrow_down_red1 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,1,0); 
   double arrow_down_red2 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,1,1);
   double arrow_down_red3 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,1,2);
   double arrow_down_red4 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,1,3);
   double arrow_down_red5 =iCustom(Symbol(),0,"Buy-Sell_Alerts",5,240,false,false,1,4);
   
   
   uni_cross_up  =iCustom(Symbol(),0, "uni_cross",0,7);
   uni_cross_down=iCustom(Symbol(),0, "uni_cross",1,7);
   
   flat_up=iCustom(Symbol(),0,"Pulse Flat",20,2.0,20,1.5,12,3,1);
   flat_down=iCustom(Symbol(),0,"Pulse Flat",20,2.0,20,1.5,12,2,1);
   flat_flat=iCustom(Symbol(),0,"Pulse Flat",20,2.0,20,1.5,12,4,1);
   Comment("flat_up=",flat_up," flat_down=",flat_down," flat=",flat_flat);

      if ((arrow_up_blue1>0)&&
         (arrow_up_blue2>0) && 
         (arrow_up_blue3>0) && 
         (arrow_up_blue4>0) &&
         (arrow_up_blue5>0) &&
         (arrow_down_red1==0) &&
         (arrow_down_red2==0) && 
         (arrow_down_red3==0) &&
         (uni_cross_up<10000000) &&
         (flat_up<0) &&
         (arrow_down_red5==0)) 
        
        {                
            SELL=false;
            BUY=true;
               
        }    
    
    
     
      if  ((arrow_down_red1>0) && 
          (arrow_down_red2>0) &&
          (arrow_down_red3>0) && 
          (arrow_down_red4>0) &&
          (arrow_down_red5>0) &&
          (arrow_up_blue1==0) &&
          (arrow_up_blue2==0) &&
          (arrow_up_blue3==0) && 
          (arrow_up_blue4==0) &&
          (uni_cross_down<1000000) &&
          (flat_down>0) &&
          (arrow_up_blue5==0)) 
       
      
       { 
            
            BUY=false;
            SELL=true;
                 
                      
       } 
       
   
//============Функции для открытия ордеров
  if (BUY)
  
   {     
//=======Закрываем ордера на продажу перед открытием на покупку=============
      for (int i=OrdersTotal()-1; i>=0; i--)
         {
            if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
            if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage);
         }
//============================================================================
   
   
      //if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
      //if (stoploss!=0)   SL  = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;     
      if (takeprofit!=0) TP=Ask+takeprofit*Point;
      if (stoploss!=0) SL=Ask-stoploss*Point;
      OPENORDER ("Buy");
   }
   
   if (SELL)
    {           
//=====Закрываем ордера на покупку перед открытием на продажу=====================================================
      for ( i=OrdersTotal()-1; i>=0; i--)
         {
            if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
            if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage);
         }
//=====================================================================================
      
      //if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
      //if (stoploss!=0)   SL = NormalizeDouble(Bid + stoploss*Point,Digits);  else SL=0;              
      if (takeprofit!=0) TP=Bid-takeprofit*Point;
      if (stoploss!=0) SL=Bid+stoploss*Point;
      OPENORDER ("Sell");
   }
  
      
//---- 
 
   return(0); 
  } 
    
  
     //Мартингейл
  //+--------------------------- getLots ----------------------------------+
 
   double getLots() 
   {
      double minlot = MarketInfo(Symbol(), MODE_MINLOT);
      int round = MathAbs(MathLog(minlot) / MathLog(10.0)) + 0.5;
      double result = Lot;
      int total = OrdersHistoryTotal();
      double spread = MarketInfo(Symbol(), MODE_SPREAD);
      // double k = (tp + sl) / (tp - spread);
   
      for (int i = 0; i < total; i++) 
         {
            OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
               if (OrderProfit() > 0) 
                  {
                     result = Lot;
                   } 
               else 
                  {
                     result = result * 2;
                  }
            
         }
   
      result = NormalizeDouble(result, round);
      double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
      if (result > maxlot) 
      {
         result = maxlot;
      }
   RefreshRates();
   return(result);
}

может попробывать прикрутить работу по времени, что бы хоть как то отсечь флетовые участки
 
  • Like
Реакции: viwm

viwm

Новичок форума
может попробовать прикрутить работу по времени, что бы хоть как то отсечь флетовые участки

У меня с флетовыми участками на тестере больше прибыль получается, да и отсечь их думаю надо несколькими индикаторами. Да и собственно торговать только на тренде выглядит как-то нереально, ведь флет это часть системы.:)
 

Warstep

Местный житель
У меня с флетовыми участками на тестере больше прибыль получается, да и отсечь их думаю надо несколькими индикаторами. Да и собственно торговать только на тренде выглядит как-то нереально, ведь флет это часть системы.:)

тогда зачем изобретать велосипед, поставь обычного мартина и не парся, тут всяких модов куча, прибыльность получишь такую же как и сейчас у тебя в тестере...
 
  • Like
Реакции: viwm

viwm

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

Дело одно, когда мартин один и когда с несколькими индикаторами, да и притом советник на стадии доработки. К чему весь этот сырбор.
 

Warstep

Местный житель
Дело одно, когда мартин один и когда с несколькими индикаторами, да и притом советник на стадии доработки. К чему весь этот сырбор.

да не я не в упрек, просто если флет, то у тебя и получается обычный мартин и что бы риски снизить надо уменьшать лот, что бы проходил проблемные участки
я за то что бы количество сделок уменьшить, если они будут точнее то можно и лот "влупить повкуснее" :D
 
  • Like
Реакции: viwm

viwm

Новичок форума
Пока тестирую советник. Решил поставить на vps сервер.
 

viwm

Новичок форума
Сигналы для мониторинга на демо счетах:

_http://www.mql5.com/ru/signals/6805#!tab=trading

_http://www.mql5.com/ru/signals/6807#!tab=trading
 
Последнее редактирование модератором:

Warstep

Местный житель
что за боты в моиторе?
что менял, что добовлял?

если что менял, то выложил бы тут на "потрогать"

ЗЫ: замониторил бы на _myfxbook.com, а то у тебя надо авторизоваться еще...
 
  • Like
Реакции: viwm

viwm

Новичок форума
Менял только некоторые параметры, используются те же индикаторы, поэтому выкладывать не вижу необходимости.

_http://www.myfxbook.com/members/nowt/spdf-5/553500
_http://www.myfxbook.com/members/nowt/sbdf-30/553511
 

viwm

Новичок форума
Проект провален. Всем спасибо за участие!
 
Верх