0
У вас в этом месяце есть 1 заказ: zakaz.opentraders.ru/29884.html
так что буду делать в следующем месяце или при наличии свободного времени.
avatar

AM2

  • 17 января 2016, 01:48
0
На сайте уже есть как минимум два советника на пробой прошлого дня. В начале месяца хочу сделать заказ похожего советника, но немного другого с дополнительными параметрами. Вопрос в том, мне это оформлять как заказ нового советника, или просьбу доработать уже существующий?


Лучше делать новым топиком, т.к. после доработок прежние заказчики спрашивают, а куда это делось, а это откуда взялось? :) 
avatar

AM2

  • 17 января 2016, 01:44
0
Здравствуйте, добавьте пож. функции:
1. лок вместо СЛ — т.е. выставление встречного ордера той же лотности, что и локируемый.
Все СЛ ТП ордеров в локе отменяются.
С остановкой советника и сигналом на е-майл, при достижении общей суммы локов заданного % от депозита.

2. трал и перевод в БУ.

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

Наблюдая за графиком и тенденциями по старшим ТФ такие локи руками довольно часто удаётся разруливать, или сокращать убытки от СЛ.


Подобные доработки делаю отдельным топиком и в соответствии с условиями: zakaz.opentraders.ru/25597.html
avatar

AM2

  • 17 января 2016, 01:38
0
Только вот я все думал как избежать убытки в тренде. Есть идея, что если скажем есть открытые позиции на продажу, и закрывать эти позиции только на следующем сигнале на продажи, с условием что есть открытые ордера на покупку. Можно как то это реализовать в этом советнике?


Сделать можно только в другом топике. Здесь делаю по стратегии автора.
avatar

AM2

  • 17 января 2016, 01:34
0
Улучшения по пунктам:
1. Неправильно ставятся стопы у лимитных ордеров. Стоп у всей сетки должен быть один, на цене стопа первого рыночного ордера. В этом варианте у каждого ордера свой стоп в 500 пунктов от цены их открытия.

Лучше даже оставить два варианта на выбор. Один как сейчас, а другой с единым стопом. Что то типа переменной:
Единый стоп у всех ордеров: true/false
false — нынешний вариант, у каждого отложенника свой стоп
true — стопы всех отложек на цене стопа первого рыночного ордера

2. Настройка уровня отбоя (крайне важная штука). По умолчанию в индикаторе стоит 61,8%, который рисуется красной линией. Я сейчас переделал индикатор в силу своих способностей, там эти уровни задаются переменными: www.opentraders.ru/downloads/1012/
В моем индикаторе есть переменная fibo_red=61.8
Можно ее вынести в советника? Она отвечает как раз за эту отбойную линию.
3. Если по тейку закрывается первый ордер (с которого началась сетка), то все отложенники удаляются. Это очень важное правило!


В понедельник продолжу.
avatar

AM2

  • 17 января 2016, 01:33
+2
С условием на отбой похуже работает: www.opentraders.ru/downloads/1014/




//+------------------------------------------------------------------+
//|                                                     Pepelats.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property description "Simple expert advisor"

//--- Inputs
extern double Lots      = 0.1;      // лот
extern int StopLoss     = 500;      // лось
extern int TakeProfit   = 50;       // язь
extern int Count        = 5;        // число отложек
extern int Step         = 200;      // спред
extern int Slip         = 30;       // реквот
extern int Expiration   = 30;       // истечение отложек в часах
extern int BarsCount    = 500;      // баров для расчета индикатора
extern int MAPeriod     = 100;      // период МА
extern int Magic        = 123;      // магик

extern string IndName="MA_Chanels_FIBO";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr;
   double sl=0,tp=0;
   datetime expiration=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);
     }

   if(type==2 || type==3) expiration=TimeCurrent()+3600*Expiration;
   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,expiration,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() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int 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) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   int i=0;
   double up=iCustom(NULL,0,IndName,BarsCount,MAPeriod,0,1);
   double dn=iCustom(NULL,0,IndName,BarsCount,MAPeriod,7,1);

   if(CountTrades()<1)
     {
      if(Ask<dn && CountOrders(2)<1)
        {
         PutOrder(0,Ask);
         for(i=0; i<=Count;i++)
           {
            PutOrder(2,Ask-Step*Point*i);
           }
        }
      if(Bid>up && CountOrders(3)<1)
        {
         PutOrder(1,Bid);
         for(i=0; i<=Count;i++)
           {
            PutOrder(3,Bid+Step*Point*i);
           }
        }
     }

   Comment("\n ");
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 16 января 2016, 03:18
0
Сегодня открытые позы по двум парам почти сразу ушли в плюс, так что теперь до понедельника.
avatar

AM2

  • 16 января 2016, 03:03
0
Для этой цели можно использовать трал лока но еще добавил и бу лока, время тоже есть.

www.opentraders.ru/downloads/948/

extern int    LockBULevel = 300;         // БУ для лока
extern int    LockBUPoint = 3;           // пункты БУ



avatar

AM2

  • 16 января 2016, 02:54
+2
Основа есть. Началось все хорошо :) 




//+------------------------------------------------------------------+
//|                                                     Pepelats.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property description "Simple expert advisor"

//--- Inputs
extern double Lots      = 0.1;      // лот
extern int StopLoss     = 500;      // лось
extern int TakeProfit   = 50;       // язь
extern int Count        = 5;        // число отложек
extern int Step         = 200;      // спред
extern int Slip         = 30;       // реквот
extern int Expiration   = 30;       // истечение отложек в часах
extern int BarsCount    = 500;      // баров для расчета индикатора
extern int MAPeriod     = 100;      // период МА
extern int Magic        = 123;      // магик

extern string IndName="MA_Chanels_FIBO";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr;
   double sl=0,tp=0;
   datetime expiration=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);
     }

   if(type==2 || type==3) expiration=TimeCurrent()+3600*Expiration;
   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,expiration,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() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int 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) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   int i=0;
   double up=iCustom(NULL,0,IndName,BarsCount,MAPeriod,0,1);
   double dn=iCustom(NULL,0,IndName,BarsCount,MAPeriod,7,1);

   if(CountTrades()<1)
     {
      if(Ask>up && CountOrders(2)<1)
        {
         PutOrder(0,Ask);
         for(i=0; i<=Count;i++)
           {
            PutOrder(2,Ask-Step*Point*i);
           }
        }
      if(Bid<dn && CountOrders(3)<1)
        {
         PutOrder(1,Bid);
         for(i=0; i<=Count;i++)
           {
            PutOrder(3,Bid+Step*Point*i);
           }
        }
     }

   Comment("\n ");
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 16 января 2016, 01:50
0
Воспользуйтесь поиском по базе, если ничего не подойдет, тогда буду делать:
www.opentraders.ru/search/?q=HMA%20Arrows

Вот подобные:

opentraders.ru/downloads/674/
www.opentraders.ru/downloads/721/
avatar

AM2

  • 16 января 2016, 00:36
0
Поправлю.
avatar

AM2

  • 16 января 2016, 00:28
0
дельта это для чего нужно?


Дельта это сколько пунктов ушло за линию, тогда и стрелка рисуется и сигналит.
avatar

AM2

  • 15 января 2016, 10:14
0
я же просил в доларах, даже в центах


В рублях это значит в валюте депозита а double означает можно ставить число с точкой 0.001 и др.
avatar

AM2

  • 15 января 2016, 10:12
0
Исправил. Если этот советник на простой боллинджер перевести то результаты еще лучше будут. И оптимизация в разы быстрей пойдет.


//+------------------------------------------------------------------+
//|                                                         ExBB.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property description "BBands expert advisor"

//--- Inputs
extern double Lots         = 0.1;  // лот
extern double KLot         = 2;    // умножение лота
extern double MaxLot       = 5;    // максимальный лот
extern int    StopLoss     = 5000; // лось
extern int    TakeProfit   = 5000; // язь
extern double Profit       = 50;   // язь в рублях
extern int    Shift        = 0;    // сдвиг
extern int    Slip         = 30;   // слипаж
//----
extern int    Length       = 20;   // период BB 
extern int    Deviation    = 2;    // отклонение ВВ
extern int    Magic        = 20;   // магик

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

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

  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr;
   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,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int 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) count++;
           }
        }
     }
   return(count);
  }  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   if(CountTrades()>0) lot=NormalizeDouble(Lots*MathPow(KLot,CountTrades()),2);
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   bool cl;

   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) cl=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
            if(OrderType()==OP_SELL) cl=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double AllProfit()
  {
   double profit=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) profit+=OrderProfit()+OrderSwap()+OrderCommission();
           }
        }
     }
   return (profit);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
//--- get Ind
   double BBBlue=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,0,Shift);
   double BBRed=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,1,Shift);
   double BBBlue2=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,0,Shift+1);
   double BBRed2=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,1,Shift+1);
   
//--- sell conditions
   if(BBRed>0 && BBBlue2>0)
     {
      PutOrder(1,Bid);
     }
//--- buy conditions
   if(BBBlue>0 && BBRed2>0)
     {
      PutOrder(0,Ask);
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      OpenPos();
      t=Time[0];
     }
     
     if(AllProfit()>Profit) CloseAll();
     Comment("\n Profit: ",AllProfit());
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 15 января 2016, 02:40
0
Вот так: www.opentraders.ru/downloads/1013/



//+------------------------------------------------------------------+
//|                                                       ProMoy.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
#property indicator_chart_window

extern int Count = 4;  //баров для расчета
extern int Delta = 50; // 

int b=0,s=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutArrow(double price,int code,color clr)
  {
   string name="Arrow"+TimeToStr(Time[0]);
//--- создадим стрелку
   ObjectCreate(0,name,OBJ_ARROW,0,Time[1],price);
//--- установим код стрелки
   ObjectSetInteger(0,name,OBJPROP_ARROWCODE,code);
//--- установим цвет стрелки
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим размер стрелки
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
  }
//+------------------------------------------------------------------+
void PutHLine(string name,double price,color clr)
  {
   ObjectDelete(name);
   ObjectCreate(0,name,OBJ_HLINE,0,0,price);
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int Shift=iBarShift(NULL,0,StringToTime("00:00"));
   double Max = High[iHighest(NULL,0,MODE_HIGH,Count,Shift)];
   double Min = Low[iLowest(NULL,0,MODE_LOW,Count,Shift)];

   PutHLine("UP",Max,Red);
   PutHLine("DN",Min,Blue);

   if(DayOfWeek()>1)
     {
      if(Bid-Max>=Delta*Point && b==0)
        {
         PutArrow(Bid,233,Aqua);
         Alert(Symbol()+" UP Proboy!");
         b=1;
         s=0;
        }

      if(Min-Bid>=Delta*Point && s==0)
        {
         PutArrow(Bid,234,Red);
         Alert(Symbol()+" DN Proboy!");
         b=0;
         s=1;
        }
     }
     
   Comment("\n Shift: ",Shift,
           "\n Max: ",Max,
           "\n Min: ",Min);

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
avatar

AM2

  • 15 января 2016, 01:32
0
Сейчас займусь.
avatar

AM2

  • 15 января 2016, 00:01
0
Тогда смотрю закрытие по профиту после установки лока.
avatar

AM2

  • 14 января 2016, 23:00
+1
Вы Андрей можете хотя бы для себя любимого сделать и посмотреть бомба это или нет


Результат известен заранее. Это просто проверка очередной идеи, не подтвержденная положительным стейтом с реала при ручной торговле по ТС.
avatar

AM2

  • 14 января 2016, 22:42