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

Рейтинг 2081



РЕКОМЕНДУЮ



Пробой трендовой линии

Здравствуйте, Андрей!

Прошу написать советник для полуавтоматической торговли.
Терминал МТ5.
Алгоритм следующий.

1. Рисуются две трендовые линии.
2. После того, как текущая свеча закрывается за трендовой линией, советник выставляет Стоп на уровне Low (Hi) данной свечи (но не менее 50 пунктов по пятизнаку) и тейк на расстоянии, равном 6 величинам от линии Stop Loss до точки пересечения ценой трендовой линии.
3. Величина тейка (кратность) изменяемая в настройках.
4. После того, как цена пройдет расстояние, равное двойному стоповому, советник переводит сделку в БУ.
5. Если сделку выбило по стопу, разрешается еще один вход в том же направлении.
Если цена пошла в другом направлении (после одного или двух стопов), то отрабатывает аналогичный порядок.
6. После достижения тейка или выхода по БУ советник прекращает работу и удаляет линии.

С уважением, Юрий.
  • +0
  • Просмотров: 1815
  • 1 февраля 2021, 15:31
  • apologetest
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Закрыватель на индикаторе ОТМА
Следующая запись в группе  
Доработка индикатора волатильности для МТ5
01 февраля 2021
01 февраля 2021

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

+
0
на 11-е
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 1 февраля 2021, 19:35
+
0
Здравствуйте, Вы не думали поставить функцию при получении стопа, увеличивающую первоначальный лот в Х раз. Я хочу сделать Т.З. на скрипт, очень Похожий на Ваш, идея придумана давно, оформить всё некогда.
avatar

  10  vladimir31 Сообщений: 136

  • 2 февраля 2021, 16:30
+
0
Похоже на систему Brekaunt. Цена загнана в угол и уходит в сторону пробоя. Тоже хочу посмотреть итог)
avatar

  3  larisa11973 Сообщений: 20

  • 2 февраля 2021, 19:33
+
0
По «Брейкауту» у меня есть отдельный советник.
Идея взята у Яна, но алгоритм торговли изменен.
В сравнении с советником Яна торговля стала более безопасной и прибыльной.

Первоначальный лот увеличивать в разы = слиться 100%.
Я категорически против «мартина» в любом виде.

Этот же советник будет реализовывать совершенно другую идею… ))
Редактирован: 2 февраля 2021, 21:22
avatar

  11  apologetest Автор Сообщений: 284 - Юрий

  • 2 февраля 2021, 21:21
+
0
Согласна). Очень хочу посмотреть.
avatar

  3  larisa11973 Сообщений: 20

  • 3 февраля 2021, 19:08
+
0
часть функций сделал, остальное в следующем топе:


//+------------------------------------------------------------------+
//|                                                     BuySell3.mq5 |
//|                                              Copyright 2021, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"

#include <Trade\Trade.mqh>          // Подключаем торговый класс CTrade

//--- Inputs
input double Lots       = 0.1;      // лот
input double KTake      = 6;        // увеличение тейка
input int BULevel       = 200;      // уровень БУ
input int BUPoint       = 20;       // пункты БУ
input int Slip          = 30;       // реквот
input int Magic         = 123;      // магик

input bool RayRight     = 1;        // продолжение линии вправо
input int Width         = 1;        // толщина линий
input color UpColor     = Red;      // цвет верхней линий
input color DnColor     = Blue;     // цвет нижней линий

CTrade trade;                       // Используем торговый класс CTrade
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   PutTrendLine("UP",iTime(NULL,0,111),Bid+222*_Point,iTime(NULL,0,0),Bid+222*_Point,UpColor);
   PutTrendLine("DN",iTime(NULL,0,111),Bid-222*_Point,iTime(NULL,0,0),Bid-222*_Point,DnColor);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
   ObjectDelete(0,"up");
   ObjectDelete(0,"dn");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
   ObjectSetInteger(0,name,OBJPROP_STYLE,0);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,Width);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,RayRight);
//--- включим (true) или отключим (false) режим перемещения линии мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,1);
   ObjectSetInteger(0,name,OBJPROP_SELECTED,1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
// Лучшее предложение на покупку
   double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
// Лучшее предложение на продажу
   double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   double sl=0,tp=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelect(_Symbol))
        {
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            if(PositionGetDouble(POSITION_PRICE_OPEN)<=Bid-BULevel*_Point)
              {
               if(PositionGetDouble(POSITION_PRICE_OPEN)>PositionGetDouble(POSITION_SL))
                 {
                  sl = PositionGetDouble(POSITION_PRICE_OPEN)+BUPoint*_Point;
                  tp = PositionGetDouble(POSITION_TP);
                  trade.PositionModify(_Symbol,sl,tp);
                 }
              }
           }

         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            if(PositionGetDouble(POSITION_PRICE_OPEN)>=Ask+BULevel*_Point)
              {
               if(PositionGetDouble(POSITION_SL)>PositionGetDouble(POSITION_PRICE_OPEN))
                 {
                  sl = PositionGetDouble(POSITION_PRICE_OPEN)-BUPoint*_Point;
                  tp = PositionGetDouble(POSITION_TP);
                  trade.PositionModify(_Symbol,sl,tp);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double pr=0,sl=0,tp=0;
   double lo=iLow(NULL,0,0);
   double hi=iHigh(NULL,0,0);

   double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);

   double up=ObjectGetValueByTime(0,"UP",iTime(NULL,0,0));
   double dn=ObjectGetValueByTime(0,"DN",iTime(NULL,0,0));

   if(BULevel>0)
      BU();

   if(PositionsTotal()<1)
     {
      if(Bid>up && lo<up)
        {
         pr=NormalizeDouble(Ask,_Digits);
         sl=NormalizeDouble(lo,_Digits);
         tp=NormalizeDouble(Bid+KTake*(up-lo),_Digits);
         trade.Buy(Lots,NULL,pr,sl,tp,"");
        }

      if(Bid<dn && hi>dn)
        {
         pr=NormalizeDouble(Bid,_Digits);
         sl=NormalizeDouble(hi,_Digits);
         tp=NormalizeDouble(Bid-KTake*(hi-dn),_Digits);
         trade.Sell(Lots,NULL,Bid,sl,tp,"");
        }
     }

   Comment("\n up: ",up,
           "\n dn: ",dn);
  }
//+------------------------------------------------------------------+

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



avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 10 февраля 2021, 21:44
+
0
Андрей, благодарю!
Не долго ждать осталось… :) 
avatar

  11  apologetest Автор Сообщений: 284 - Юрий

  • 11 февраля 2021, 20:42
+
0
дописал недостающие функции: www.opentraders.ru/downloads/2928/

avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 11 февраля 2021, 21:50
+
0
Андрей, благодарю!
Просто подарок ко дню рождения!
*hi* 
avatar

  11  apologetest Автор Сообщений: 284 - Юрий

  • 12 февраля 2021, 09:28

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