← К каталогу
Исходный код · ID 3678

VFX London Breakout

vfx_london_breakout.mq4
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

VFX London Breakout — торговый советник для MetaTrader 4, предназначенный для автоматической торговли в ходе лондонской торговой сессии. Советник определяет диапазон цены на таймфрейме M15 и открывает позицию при её пробое за заданные параметры.

В начале каждой торговой сессии (время и длительность настраиваются) эксперт проверяет, находится ли текущая цена в допустимом диапазоне спреда и соответствует ли объём диапазона заданным ограничениям. При подтверждении условий он оценивает направление сделки по настройкам для конкретного дня недели и открывает ордер на покупку или продажу.

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

Настройки программы

НастройкаОписание
London Opening Time (LondonOpen) Время открытия Лондона — Время открытия лондонской сессии — момент начала торговой сессии в формате часового смещения от полуночи.
Positions On Monday (PosMonday) Позиции в понедельник — Направление позиций в понедельник — определяет, в какую сторону открываются позиции в понедельник (только лонг, только шорт, оба или нет).
Positions On Tuesday (PosTuesday) Позиции во вторник — Направление позиций во вторник — определяет, в какую сторону открываются позиции во вторник (только лонг, только шорт, оба или нет).
Positions On Wednesday (PosWednesday) Позиции в среду — Направление позиций в среду — определяет, в какую сторону открываются позиции в среду (только лонг, только шорт, оба или нет).
Positions On Thursday (PosThursday) Позиции в четверг — Направление позиций в четверг — определяет, в какую сторону открываются позиции в четверг (только лонг, только шорт, оба или нет).
Positions On Friday (PosFriday) Позиции в пятницу — Направление позиций в пятницу — определяет, в какую сторону открываются позиции в пятницу (только лонг, только шорт, оба или нет).
Set Positions Risk By (PosRiskBy) Метод расчёта риска — Метод расчёта риска — определяет, как рассчитывается размер позиции: по проценту от баланса, по фиксированной сумме или по фиксированному лоту.
Positions Risk (PosRisk) Размер риска — Размер риска — числовое значение риска на позицию, интерпретация зависит от выбранного метода расчёта риска.
Stop Loss (Points) (StopLoss) Стоп-лосс — Стоп-лосс (в пунктах) — расстояние в пунктах от цены входа для установки уровня стоп-лосса.
Take Profit (Points) (TakeProfit) Тейк-профит — Тейк-профит (в пунктах) — расстояние в пунктах от цены входа для установки уровня тейк-профита.
Maximum Trading Range (Points) (MaxRange) Максимальный торговый диапазон — Максимальный торговый диапазон (в пунктах) — верхняя граница допустимого размера ценового диапазона для торговли.
Minimum Trading Range (Points) (MinRange) Минимальный торговый диапазон — Минимальный торговый диапазон (в пунктах) — нижняя граница допустимого размера ценового диапазона для торговли.
Break Of Trading Range (Points) (BreakRange) Прорыв торгового диапазона — Прорыв торгового диапазона (в пунктах) — количество пунктов, на которое цена должна пробить верхнюю или нижнюю границу диапазона для открытия позиции.
Maximum Spread (Points) (MaxSpread) Максимальный спред — Максимальный спред (в пунктах) — пороговое значение спреда, при превышении которого торговля не осуществляется.
Maximum Price Slippage (Points) (Slippage) Максимальное проскальзывание — Максимальное проскальзывание цены (в пунктах) — допустимое отклонение цены исполнения от запрашиваемой.
Magic Number (MagicNumber) Магический номер — Магический номер — идентификатор, присваиваемый ордерам для их распознавания среди других советников.
Получить полный код

Поиск по коду файла

#property description "System of automatic trading during the London session which uses"
#property description "a strategy to identify a valid trading range in the intraday timeframes"
#property description "and awaits the breakout to open position."

#property version     "1.10"
#property strict

enum ENUM_LON_OPEN
  {
   H00M00 =     0,   // 00:00
   H00M30 =  1800,   // 00:30
   H01M00 =  3600,   // 01:00
   H01M30 =  5400,   // 01:30
   H02M00 =  7200,   // 02:00
   H02M30 =  9000,   // 02:30
   H03M00 = 10800,   // 03:00
   H03M30 = 12600,   // 03:30
   H04M00 = 14400,   // 04:00
   H04M30 = 16200,   // 04:30
   H05M00 = 18000,   // 05:00
   H05M30 = 19800,   // 05:30
   H06M00 = 21600,   // 06:00
   H06M30 = 23400,   // 06:30
   H07M00 = 25200,   // 07:00
   H07M30 = 27000,   // 07:30
   H08M00 = 28800,   // 08:00
   H08M30 = 30600,   // 08:30
   H09M00 = 32400,   // 09:00
   H09M30 = 34200,   // 09:30
   H10M00 = 36000,   // 10:00
   H10M30 = 37800,   // 10:30
   H11M00 = 39600,   // 11:00
   H11M30 = 41400,   // 11:30
   H12M00 = 43200,   // 12:00
   H12M30 = 45000,   // 12:30
   H13M00 = 46800,   // 13:00
   H13M30 = 48600,   // 13:30
   H14M00 = 50400,   // 14:00
   H14M30 = 52200,   // 14:30
   H15M00 = 54000,   // 15:00
   H15M30 = 55800,   // 15:30
   H16M00 = 57600,   // 16:00
   H16M30 = 59400,   // 16:30
   H17M00 = 61200,   // 17:00
   H17M30 = 63000,   // 17:30
   H18M00 = 64800,   // 18:00
   H18M30 = 66600,   // 18:30
   H19M00 = 68400,   // 19:00
   H19M30 = 70200,   // 19:30
   H20M00 = 72000,   // 20:00
   H20M30 = 73800,   // 20:30
   H21M00 = 75600,   // 21:00
   H21M30 = 77400,   // 21:30
   H22M00 = 79200,   // 22:00
   H22M30 = 81000,   // 22:30
   H23M00 = 82800,   // 23:00
   H23M30 = 84600    // 23:30
  };
enum ENUM_POS_DAY
  {
   PosLongOnly,      // Long Only
   PosShortOnly,     // Short Only
   PosLongShort,     // Long & Short
   PosNo             // None
  };
enum ENUM_RISK_BY
  {
   RiskPercentage,   // Percentage
   RiskAmount,       // Amount
   RiskFixedLot      // Fixed Lot
  };

input ENUM_LON_OPEN LondonOpen   = H10M00;           // London Opening Time
input ENUM_POS_DAY  PosMonday    = PosNo;            // Positions On Monday
input ENUM_POS_DAY  PosTuesday   = PosShortOnly;     // Positions On Tuesday
input ENUM_POS_DAY  PosWednesday = PosShortOnly;     // Positions On Wednesday
input ENUM_POS_DAY  PosThursday  = PosShortOnly;     // Positions On Thursday
input ENUM_POS_DAY  PosFriday    = PosShortOnly;     // Positions On Friday
input ENUM_RISK_BY  PosRiskBy    = RiskPercentage;   // Set Positions Risk By
input double        PosRisk      = 0.5;              // Positions Risk
input int           StopLoss     = 300;              // Stop Loss (Points)
input int           TakeProfit   = 600;              // Take Profit (Points)
input int           MaxRange     = 380;              // Maximum Trading Range (Points)
input int           MinRange     = 110;              // Minimum Trading Range (Points)
input int           BreakRange   = 10;               // Break Of Trading Range (Points)
input int           MaxSpread    = 15;               // Maximum Spread (Points)
input int           Slippage     = 10;               // Maximum Price Slippage (Points)
input int           MagicNumber  = 112233;           // Magic Number

ENUM_POS_DAY Positions[7];
double       RangeSpread;
string       ErrMsg;

int OnInit()
  {
      // код доступен только после оплаты
   }

void OnTick()
  {
      // код доступен только после оплаты
   }

double CalculateVolume(int OpType, double SL)
  {

   double TickValue, Risk, Lot;

   if(PosRiskBy == RiskFixedLot) {return(PosRisk);}

   if(OpType == OP_BUY)
     {
      TickValue = ((Ask - SL) / Point) * MarketInfo(Symbol(), MODE_TICKVALUE);
     }
   else
     {
      TickValue = ((SL - Bid) / Point) * MarketInfo(Symbol(), MODE_TICKVALUE);
     }
   if(TickValue == 0.0) {return(0.0);}

   Risk = PosRisk;
   if(PosRiskBy == RiskPercentage) {Risk = (AccountBalance() + AccountCredit()) * (PosRisk / 100);}
   Lot = NormalizeDouble(Risk / TickValue, 2);

   return(Lot);
  }

bool CheckVolume(double Lot)
  {

   double MinVolume = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN);
   if(Lot < MinVolume)
     {
      ErrMsg = StringConcatenate("Volume less than the minimum allowed. The minimum volume is ", MinVolume, ".");
      return(false);
     }

   double MaxVolume = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MAX);
   if(Lot > MaxVolume)
     {
      ErrMsg = StringConcatenate("Volume greater than the maximum allowed. The maximum volume is ", MaxVolume, ".");
      return(false);
     }

   double VolumeStep = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP);

   int Ratio = (int)MathRound(Lot / VolumeStep);
   if(MathAbs(Ratio * VolumeStep - Lot) > 0.0000001)
     {
      ErrMsg = StringConcatenate("The volume is not multiple of the minimum gradation ", VolumeStep,
                                 ". Volume closest to the valid ", Ratio * VolumeStep, ".");
      return(false);
     }

   return(true);
  }

string ErrorDescription(int ErrorCode)
  {

   string ErrorMsg;

   switch(ErrorCode)
     {

      case 0:    ErrorMsg="No error returned.";                                             break;
      case 1:    ErrorMsg="No error returned, but the result is unknown.";                  break;
      case 2:    ErrorMsg="Common error.";                                                  break;
      case 3:    ErrorMsg="Invalid trade parameters.";                                      break;
      case 4:    ErrorMsg="Trade server is busy.";                                          break;
      case 5:    ErrorMsg="Old version of the client terminal.";                            break;
      case 6:    ErrorMsg="No connection with trade server.";                               break;
      case 7:    ErrorMsg="Not enough rights.";                                             break;
      case 8:    ErrorMsg="Too frequent requests.";                                         break;
      case 9:    ErrorMsg="Malfunctional trade operation.";                                 break;
      case 64:   ErrorMsg="Account disabled.";                                              break;
      case 65:   ErrorMsg="Invalid account.";                                               break;
      case 128:  ErrorMsg="Trade timeout.";                                                 break;
      case 129:  ErrorMsg="Invalid price.";                                                 break;
      case 130:  ErrorMsg="Invalid stops.";                                                 break;
      case 131:  ErrorMsg="Invalid trade volume.";                                          break;
      case 132:  ErrorMsg="Market is closed.";                                              break;
      case 133:  ErrorMsg="Trade is disabled.";                                             break;
      case 134:  ErrorMsg="Not enough money.";                                              break;
      case 135:  ErrorMsg="Price changed.";                                                 break;
      case 136:  ErrorMsg="Off quotes.";                                                    break;
      case 137:  ErrorMsg="Broker is busy.";                                                break;
      case 138:  ErrorMsg="Requote.";                                                       break;
      case 139:  ErrorMsg="Order is locked.";                                               break;
      case 140:  ErrorMsg="Buy orders only allowed.";                                       break;
      case 141:  ErrorMsg="Too many requests.";                                             break;
      case 145:  ErrorMsg="Modification denied because order is too close to market.";      break;
      case 146:  ErrorMsg="Trade context is busy.";                                         break;
      case 147:  ErrorMsg="Expirations are denied by broker.";                              break;
      case 148:  ErrorMsg="The amount of open and pending orders has reached the limit.";   break;
      case 149:  ErrorMsg="An attempt to open an order opposite when hedging is disabled."; break;
      case 150:  ErrorMsg="An attempt to close an order contravening the FIFO rule.";       break;

      case 4000: ErrorMsg="No error returned.";                                             break;
      case 4001: ErrorMsg="Wrong function pointer.";                                        break;
      case 4002: ErrorMsg="Array index is out of range.";                                   break;
      case 4003: ErrorMsg="No memory for function c

Показано первые 50% кода (символов: 14429)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 442,90₽ ≈ $17.64