cardon

 
Уровень 10

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ




Лучшее от cardon



дороботка сова Комментариев 68
2016-11-24 13:25:33Рейтинг 0

советник на 1 МА Комментариев 13
2016-07-29 13:57:46Рейтинг 0

просто индюк Комментариев 22
2016-09-17 11:18:53Рейтинг 0

доработка сова Комментариев 2
2017-01-09 19:57:28Рейтинг 0

сова просто сова Комментариев 19
2016-10-06 16:43:18Рейтинг 0

доработка сова

У меня был заказ в этом месяце, но его не доделали и получил отказ. Поэтому я решил создать другой заказ, авось проконает, так как первый не закончен :) (попытка не пытка, как говорится)

советник www.opentraders.ru/downloads/1400/

Тестировал на соревнованиях, после набранных 30% успешно слил депо) из за кучи открытых ордеров.

сделать так чтоб он открывал ордера всего один раз за одну свечку, то есть ограничить его, сейчас он может открыть за одну свечку (минуту) столько, сколько успеет, а надо за одну свечу один цикл селл и бай.
Получается если мы выставили волотильность свечи 30пп. и если свеча больше 30пп. то у нас открывается ордер, и если свеча не закончилась то сов видит, что волотильность больше 30пп. и открывает еще и еще, так мы открываем кучку ордеров на 1 минутной свечи.

что надо сделать:
Добавить ограничение открытия ордеров в одну свечку.
  • +2
  • Просмотров: 2063
  • 9 января 2017, 19:57
  • cardon
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Didi Index - советник для MetaTrader 5
Следующая запись в группе  
переделать советник в мндикатор
07 января 2017
10 января 2017

Брокер для ваших роботов, 15 лет на рынке

Комментарии (2)

+
+1
Посмотрите как поведет себя такой вариант:


//+------------------------------------------------------------------+
//|                                                       Bablos.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

extern int    StopLoss     = 500;      // лось
extern int    TakeProfit   = 10;       // язь
extern int    Delta        = 10;       // расстояние для отложек
extern int    Spread       = 10;       // спред
extern int    Vol          = 40;       // волатильность
extern int    Slip         = 0;        // реквот
extern int    StartHour    = 0;        // час начала торговли
extern int    StartMin     = 30;       // минута начала торговли
extern int    EndHour      = 23;       // час окончания торговли
extern int    EndMin       = 30;       // минута окончания торговли
extern int    StopTrade    = 0;        // 1-остановка после закрытия всех ордеров
extern int    Magic1       = 111;      // магик 1
extern int    Magic2       = 222;      // магик 2
extern double Lots         = 0.1;      // лот
extern string SoundTake    = "ok.wav"; // звук тейк
extern string SoundTrade="expert.wav"; // звук остановка

int cycle=0;
datetime t=0;
bool trade=true;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
  {
   datetime db, de;           // Время начала и окончания работы
   int      hc;               // Часы текущего времени торгового сервера

   db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)hb+":"+(string)mb);
   de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)he+":"+(string)me);
   hc=TimeHour(TimeCurrent());

   if(db>=de)
     {
      if(hc>=he) de+=24*60*60; else db-=24*60*60;
     }

   if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
   else return(False);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price,int magic)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Подсчет позиций                                                  |
//+------------------------------------------------------------------+
int CountTrades(int ot=-1)
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==0 && (ot==0 || ot==-1)) count++;
            if(OrderType()==1 && (ot==1 || ot==-1)) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ModifyOrders(int magic)
  {
   double all=0,tp=0,sl=0;
   double count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               all+=OrderOpenPrice()*OrderLots();
               count+=OrderLots();
              }
           }
        }
     }
   if(count>0) all=NormalizeDouble(all/count,Digits);

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
           {
            if(OrderType()==OP_BUY)
              {
               tp=NormalizeDouble(all+TakeProfit*Point,Digits);
               sl=NormalizeDouble(all-StopLoss*Point,Digits);
               if(OrderStopLoss()!=sl || OrderTakeProfit()!=tp)
                  bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
              }
            if(OrderType()==OP_SELL)
              {
               tp=NormalizeDouble(all-TakeProfit*Point,Digits);
               sl=NormalizeDouble(all+StopLoss*Point,Digits);
               if(OrderStopLoss()!=sl || OrderTakeProfit()!=tp)
                  bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Mode()
  {
   bool m;
   double oop=0,sl=0,tp=0;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==2)
              {
               if((Ask-OrderOpenPrice()>Delta*Point) || (Ask-OrderOpenPrice()<Delta*Point))
                 {
                  oop=NormalizeDouble(Ask-Delta*Point,Digits);
                  if(StopLoss>0) sl=NormalizeDouble(oop-StopLoss*Point,Digits);
                  if(TakeProfit>0) tp=NormalizeDouble(oop+TakeProfit*Point,Digits);
                  if(OrderOpenPrice()!=oop) m=OrderModify(OrderTicket(),oop,sl,tp,OrderExpiration(),Lime);
                 }

              }

            if(OrderType()==3)
              {
               if((OrderOpenPrice()-Bid>Delta*Point) || (OrderOpenPrice()-Bid<Delta*Point))
                 {
                  oop=NormalizeDouble(Bid+Delta*Point,Digits);
                  if(StopLoss>0) sl=NormalizeDouble(oop+StopLoss*Point,Digits);
                  if(TakeProfit>0) tp=NormalizeDouble(oop-TakeProfit*Point,Digits);
                  if(OrderOpenPrice()!=oop) m=OrderModify(OrderTicket(),oop,sl,tp,OrderExpiration(),Lime);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double vol=MathAbs((Open[0]-Close[0])/Point);
   double spread=MarketInfo(NULL,MODE_SPREAD);

   if(cycle>0 && CountTrades()<1 && StopTrade>0) trade=false;

   if(trade==False)
     {
      PlaySound(SoundTrade);
      Alert("SoundTrade");
     }

   if(cycle>0 && (CountTrades(0)<1 || CountTrades(0)<1))
     {
      PlaySound(SoundTake);
      Alert("SoundTake");
     }

   if(trade)
     {
      if(vol>Vol && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin) && spread<=Spread)
        {
         if(t!=Time[0])
           {
            if(CountOrders(3)<1) PutOrder(3,Bid+Delta*Point,Magic1);
            if(CountOrders(2)<1) PutOrder(2,Ask-Delta*Point,Magic2);
            t=Time[0];
           }
        }

      if(CountOrders(0)>0) ModifyOrders(Magic2);
      if(CountOrders(1)>0) ModifyOrders(Magic1);

      Mode();
      if(CountTrades()>0) cycle++;
     }

   Comment("\n Trades: ",CountTrades(),
           "\n Vol: ",NormalizeDouble(vol,1),
           "\n Spread: ",spread,
           "\n Cycle: ",cycle,
           "\n Trade: ",trade);
  }
//+------------------------------------------------------------------+


Редактирован: 9 января 2017, 22:09
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 9 января 2017, 21:22
+
0
да это оно :)  теперь можно и на разных тф гонять
avatar

  10  cardon Автор Сообщений: 376

  • 10 января 2017, 12:16

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий