AM2
Андрей

 
Уровень 24

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


Группа "Торговые системы FOREX"

Рейтинг 520



100% ордеров в плюс или тысячи процентов годовых

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

Рассмотрим недельный график пары EURUSD:



Ширина канала колеблется в пределах 10-15 тыс. пунктов по 5-ти знаку. Продолжительность тенденции от полугода до 5 и более лет. Последний коридор длится около двух лет и имеет ширину около 12 тыс пунктов. Открываясь небольшим лотом от границ канала можно спокойно достичь требуемой доходности и 100% сделок в плюс.

В эффективности и реальности данного метода торговли мы можем убедиться на примере трейдов пользователя: fxsev



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

Лето как правило славится своим боковым движением по евре, набрав за это время ощутимый процент к депозиту, все последующие месяцы он ведет торговлю с понижением риска, что позволяет ему ежемесячно выводить по 200-300 долларов. Начинал он с суммы около 10 долларов.

Если протестировать подобную стратегию на истории мы получим следующие результаты. Открываясь по тренду всего лишь одним лотом на депо в 10000, через совсем небольшой промежуток времени мы получает 10000% прибыли. При этом мы сходили только в одну сторону канала а как мы видим наш коридор за последние 2 года содержит целых 5 таких проходов.



Чтобы протестировать стратегию можете воспользоваться моей версией ручного тестера:



//+------------------------------------------------------------------+
//|                                                   HandTester.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

//--- Inputs
extern double Lots       = 0.1;      // лот
extern int StopLoss      = 150;      // лось
extern int TakeProfit    = 600;      // язь
extern int BULevel       = 150;      // уровень БУ
extern int BUPoint       = 30;       // пункты БУ
extern int TrailingStop  = 200;      // трал
extern int TrailingStep  = 20;       // шаг трала
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   PutButton("B",100,120,"BUY");
   PutButton("S",100,80,"SELL");
   PutButton("C",100,40,"CLOSE");

   PutEdit("L",60,30,(string)Lots);
   PutLable("LT",10,32,"LOT");

   PutEdit("SL",60,60,(string)StopLoss);
   PutLable("ST",10,62,"SL");

   PutEdit("TP",60,90,(string)TakeProfit);
   PutLable("TK",10,92,"TP");

   PutEdit("BU",60,120,(string)BULevel);
   PutLable("Z",10,122,"BU");

   PutEdit("TS",60,150,(string)TrailingStop);
   PutLable("TR",10,152,"TS");

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(0,"B");
   ObjectDelete(0,"S");
   ObjectDelete(0,"C");
   ObjectDelete(0,"L");
   ObjectDelete(0,"LT");
   ObjectDelete(0,"SL");
   ObjectDelete(0,"ST");
   ObjectDelete(0,"TP");
   ObjectDelete(0,"TK");
   ObjectDelete(0,"BU");
   ObjectDelete(0,"Z");
   ObjectDelete(0,"TS");
   ObjectDelete(0,"TR");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);

//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutEdit(string name,int x,int y,string text)
  {
//--- создадим поле ввода
   ObjectCreate(0,name,OBJ_EDIT,0,0,0);
//--- установим координаты объекта
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размеры объекта
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим способ выравнивания текста в объекте
   ObjectSetInteger(0,name,OBJPROP_ALIGN,ALIGN_CENTER);
//--- установим (true) или отменим (false) режим только для чтения
   ObjectSetInteger(0,name,OBJPROP_READONLY,false);
//--- установим угол графика, относительно которого будут определяться координаты объекта
   ObjectSetInteger(0,name,OBJPROP_CORNER,0);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLable(string name,int x,int y,string text)
  {
//--- создадим текстовую метку
   ObjectCreate(0,name,OBJ_LABEL,0,0,0);
//--- установим координаты метки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,0);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   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()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   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;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_BUY)
           {
            if(Bid-OrderOpenPrice()>TrailingStop*Point)
              {
               if(OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point)
                 {
                  mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }

         if(OrderType()==OP_SELL)
           {
            if((OrderOpenPrice()-Ask)>TrailingStop*Point)
              {
               if(OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0)
                 {
                  mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool m;
   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)
              {
               if(OrderOpenPrice()<=(Bid-(BULevel+BUPoint)*Point) && OrderOpenPrice()>OrderStopLoss())
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()>=(Ask+(BULevel+BUPoint)*Point) && (OrderOpenPrice()<OrderStopLoss() || OrderStopLoss()==0))
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(BULevel>0) BU();
   if(TrailingStop>0) Trailing();

   if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
     {
      PutOrder(0,Ask);
      ObjectSetInteger(0,"B",OBJPROP_STATE,false);
     }

   if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
     {
      PutOrder(1,Bid);
      ObjectSetInteger(0,"S",OBJPROP_STATE,false);
     }

   if(OrdersTotal()>0 && ObjectGetInteger(0,"C",OBJPROP_STATE)==1)
     {
      CloseAll();
      ObjectSetInteger(0,"C",OBJPROP_STATE,false);
     }
  }
//+------------------------------------------------------------------+




Данная версия открывает несколько ордеров одновременно, также сразу их закрывает. Если вам нужна версия в которой можно будет менять лот и другие параметры во время тестирования, обращайтесь в Стол заказов MQL.
  • +30
  • Просмотров: 2517
  • 21 декабря 2016, 20:18
  • AM2
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Торговые системы FOREX", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
TTC CROSS POINT
23 ноября 2016
10 марта 2017

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

+
0
Тыжжжж крут ешки матрешки! Плюсанул.Админу надо подумать о таком знаке, для таких как ты :D 
avatar

  8  ATSForex Сообщений: 174 - ATS Forex

  • 21 декабря 2016, 20:27
+
0
*good* 
avatar

  8  Paguk Сообщений: 329 - суровый трейдер

  • 22 декабря 2016, 02:16
+
0
Андрей, приветствую! А сложно сделать HandTester.mq5 — под МТ5 :)  очень классная штука получилась. Спасибо.
avatar

  7  poker Сообщений: 207

  • 22 декабря 2016, 10:47
+
0
Возможно.
avatar

  24  AM2 Автор Сообщений: 5767 - Андрей

  • 22 декабря 2016, 11:52
+
0
Тогда как лучше? Заказ сделать в январе через стол заказов?
avatar

  7  poker Сообщений: 207

  • 22 декабря 2016, 12:13
+
0
да
avatar

  24  AM2 Автор Сообщений: 5767 - Андрей

  • 22 декабря 2016, 19:30
+
0
Андрей за подсказку по каналам спасибо, попробую взять в будущем на вооружение этот момент.
avatar

  8  fxsev Сообщений: 109 - Эдуард

  • 23 декабря 2016, 13:29
+
0
Андрей, можно вопрос? То есть, если стопом служит стопаут, то получается после каждого стопаута происходит доливка? (Или это, скорее, вопрос к fxsev) И разве стопаут не засчитывается, как убыточная сделка? Почему тогда 100% сделок прибыльные?
Редактирован: 26 декабря 2016, 22:52
avatar

  6  vasdco Сообщений: 107 - Мастер

  • 26 декабря 2016, 22:43
+
+1
В топике мои мысли как можно достичь подобного результата. Когда делал советник, по стопу закрылись 4-5 сделок из 2000.
avatar

  24  AM2 Автор Сообщений: 5767 - Андрей

  • 27 декабря 2016, 00:45
+
0
Ок. Хорошо. Спасибо.
avatar

  6  vasdco Сообщений: 107 - Мастер

  • 27 декабря 2016, 00:50
+
0
ещё бы знать когда канал перерисовываться будет и в какую сторону
avatar

  18  Drughemp Сообщений: 725 - Александр

  • 7 января 2017, 09:08
+
0
Андрей, можете сделать MTF индикатор рисующий такие каналы по ТС, без перерисовки и без стирания их,
оставляющий предыдущие прорисовки на своих местах?
Примерно так, как на скрине вначале (недельный график пары EURUSD).
MTF — чтоб накладывать каналы бОльших периодов на рабочий, «канал в канале» — так ещё интереснее ))).
Было б классно! *hi* 
Редактирован: 7 января 2017, 11:01
avatar

  8  preasto Сообщений: 308

  • 7 января 2017, 10:24
+
0
Ссылочку, то эту я давно нашел, эта ссылочка меня и привела туда))) Ещё раз спасибо))) Всё искал этот советник хотел очень по тестить и посмотреть, что к чему, а он оказывается не для общего пользования)))
avatar

  3  maximyc Сообщений: 22

  • 30 марта 2017, 16:48

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

 
Как начать: открываем первую торговую сделку за 7 шагов →