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

MFI_R2_EA_v2.3

mfi_r2_ea_v2.3.mq4

Похожие материалы по тегам

#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 1 общих теговsma crossover scalper ea for mt4.mq4MQL4 / MetaTrader 4 · 1 общих теговr15 pivot points expert advisor by @fundedmillionairess.mq4MQL4 / MetaTrader 4 · 1 общих теговnewstrader.mq5MQL5 / MetaTrader 5 · 1 общих теговmm3.0_flip_codepro_v3.1_with_cooldown@lifeindreamsworld.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Советник для платформы MetaTrader 4, использующий индикатор Money Flow Index (MFI) и скользящую среднюю для формирования торговых сигналов на покупку и продажу. Открывает позиции при совпадении условий по MFI и MA с возможностью дополнительной фильтрации по углу скользящей средней. Реализует несколько стратегий выхода из позиций, включая проверку по MFI, CCI и SMA 200.

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

НастройкаОписание
Expert_Name Имя эксперта — Идентификатор советника для отображения в комментариях ордеров
LotSize Размер лота — Фиксированный размер лота при отключённом управлении рисками
RiskPercent Процент риска — Процент от средств счёта, используемый для расчёта размера лота при включённом управлении рисками
UseMoneyMgmt Управление рисками — Включает расчёт размера лота на основе процента риска от equity
BrokerPermitsFractionalLots Дробные лоты брокера — Разрешает ли брокер дробные значения лота
mi Настройки скользящей средней — Группа параметров для настройки MA-фильтра тренда
MaTrend_Period Период MA тренда — Период скользящей средней для определения направления тренда
ri Настройки MFI — Группа параметров индикатора Money Flow Index
input value to be optimized (MFI_Period) Период MFI — Период расчёта индикатора Money Flow Index
UseDefaultMFI_Period Стандартный период MFI — Использовать ли общий период MFI или индивидуальный для каждого инструмента
BuyWhenMFIBelow Порог покупки MFI — Значение MFI ниже которого рассматривается сигнал на покупку
SellWhenMFIAbove Порог продажи MFI — Значение MFI выше которого рассматривается сигнал на продажу
MFI_Overbought_Value Уровень перекупленности MFI — Значение MFI, превышение которого считается сигналом к закрытию позиции на покупку
MFI_Oversold_Value Уровень перепроданности MFI — Значение MFI, снижение ниже которого считается сигналом к закрытию позиции на продажу
useMFI4BarsBack Подтверждение MFI по 4 барам — Использовать ли дополнительное подтверждение сигнала по значению MFI на 4 бара ранее
BuyWhenAbove Порог подтверждения покупки — Значение MFI на текущем баре выше которого подтверждается сигнал на покупку
SellWhenBelow Порог подтверждения продажи — Значение MFI на текущем баре ниже которого подтверждается сигнал на продажу
useNewExitStrategy Новая стратегия выхода — Использовать ли расширенные условия выхода на основе текущих значений MFI
MFI_High_OverBought_Exit Выход при высокой перекупленности — Порог MFI для выхода при новой стратегии выхода при перекупленности
MFI_Low_OverSold_Exit Выход при низкой перепроданности — Порог MFI для выхода при новой стратегии выхода при перепроданности
use200SMA_Exit Выход по SMA 200 — Использовать ли выход из позиции при пересечении цены с SMA 200
useMFI14_Exit Выход по MFI 14 — Использовать ли выход из позиции при пересечении MFI 14 через 50
MFI_Exit_Period Период MFI для выхода — Период расчёта MFI, используемый в стратегиях выхода
useCCI50_Exit Выход по CCI 50 — Использовать ли выход из позиции при пересечении CCI 50 через ноль
CCI_ExitLevel Уровень CCI для выхода — Пороговое значение CCI для стратегии выхода
st1 Таймфрейм сигнала — Группа параметров таймфрейма для формирования сигналов
Signal_TimeFrame Таймфрейм сигнала — Таймфрейм, на котором рассчитываются индикаторы для формирования сигналов
hd Ограничение сделок — Группа параметров ограничения количества сделок
useDelay Задержка между сделками — Запрещать ли открытие новой сделки в день закрытия предыдущей
ai Фильтр угла MA — Группа параметров фильтра угла скользящей средней
a2 Включение фильтра угла — Текстовая подсказка для включения фильтра угла MA
useMaAngleFilter Фильтр угла MA — Использовать ли дополнительную фильтрацию по углу скользящей средней
TrendTimeFrame Таймфрейм тренда — Таймфрейм для расчёта MA, используемой в фильтре угла
Threshold Порог угла — Пороговое значение угла MA для подтверждения направления тренда
PrevShift Сдвиг предыдущего значения — Сдвиг предыдущего значения MA для расчёта угла
CurShift Сдвиг текущего значения — Сдвиг текущего значения MA для расчёта угла
st6 Прибыль и стопы — Группа параметров управления прибылью и убытками
StopLoss Стоп-лосс — Фиксированный размер стоп-лосса в пунктах
TakeProfit Тейк-профит — Фиксированный размер тейк-профита в пунктах
Slippage Проскальзывание — Допустимое проскальзывание при открытии и закрытии ордеров
tsp0 Типы трейлинг-стопов — Группа описаний типов трейлинг-стопов
tsp1 Тип 1 — Немедленное перемещение стоп-лосса вслед за ценой
tsp2 Тип 2 — Ожидание движения цены на величину трейлинг-стопа перед началом трейлинга
tsp3 Тип 3 — Использование трёх уровней перед началом трейлинга
tsp4 Тип 4 — Перемещение стопа в брейк-эвен с фиксацией прибыли
tsp5 Тип 5 — Пошаговый трейлинг-стоп
tsp6 Тип 6 — Трейлинг-стоп на основе EMA
tsp7 Тип 7 — Трейлинг-стоп на основе параболического SAR
tsp8 Тип 8 — Трейлинг-стоп на основе параболического SAR по автору Bluto
UseTrailingStop Трейлинг-стоп — Включает или отключает трейлинг-стоп
TrailingStopType Тип трейлинг-стопа — Номер типа используемого трейлинг-стопа
ts2 Настройки типа 2 — Группа параметров для типа 2 трейлинг-стопа
Change to whatever number of pips you wish to trail your position with. (TrailingStop) Трейлинг-стоп — Расстояние в пипсах для трейлинга стоп-лосса
ts3 Настройки типа 3 — Группа параметров для трёхуровневого трейлинг-стопа
Type 3 first level pip gain (FirstMove) Первый уровень — Расстояние в пунктах первого уровня для перемещения стопа
Move Stop to Breakeven (FirstStopLoss) Стоп первого уровня — Расстояние стоп-лосса на первом уровне для перехода в брейк-эвен
Type 3 second level pip gain (SecondMove) Второй уровень — Расстояние в пунктах второго уровня для перемещения стопа
Move stop to lock is profit (SecondStopLoss) Стоп второго уровня — Расстояние стоп-лосса на втором уровне для фиксации прибыли
type 3 third level pip gain (ThirdMove) Третий уровень — Расстояние в пунктах третьего уровня для перемещения стопа
Move stop and trail from there (TrailingStop3) Трейлинг-стоп третьего уровня — Расстояние трейлинга после достижения третьего уровня
ts4 Настройки типа 4 — Группа параметров для типа 4 трейлинг-стопа
BreakEven Брейк-эвен — Расстояние в пунктах для перемещения стопа в брейк-эвен
Profit Lock in pips (LockInPips) Фиксация прибыли — Количество пунктов прибыли для фиксации при выходе в брейк-эвен
ts5 Настройки типа 5 — Группа параметров для типа 5 трейлинг-стопа
eTrailingStop Расстояние e-трейлинга — Расстояние в пунктах для e-трейлинг-стопа
eTrailingStep Шаг e-трейлинга — Шаг в пунктах для пошагового e-трейлинг-стопа
ts6 Настройки типа 6 — Группа параметров для типа 6 трейлинг-стопа
EMATimeFrame Таймфрейм EMA — Таймфрейм для расчёта EMA, используемой в трейлинг-стопе
Price Тип цены — Тип цены для расчёта EMA
EMAPeriod Период EMA — Период экспоненциальной скользящей средней для трейлинг-стопа
EMAShift Сдвиг EMA — Сдвиг EMA по барам
InitialStop Начальный стоп — Начальное расстояние стоп-лосса при использовании EMA-трейлинга
ts7 Настройки типа 7 — Группа параметров для типа 7 трейлинг-стопа
pi Настройки pSAR — Группа параметров параболического SAR
StepParabolic Шаг SAR — Шаг изменения параболического SAR
MaxParabolic Максимум SAR — Максимальное значение параболического SAR
Interval Интервал SAR — Интервал в пунктах для трейлинг-стопа на основе SAR
ts8 Настройки типа 8 — Группа параметров для типа 8 трейлинг-стопа
pi2 Настройки pSAR Bluto — Группа параметров параболического SAR по автору Bluto
SarStep Шаг SAR Bluto — Шаг параболического SAR для трейлинг-стопа типа 8
SarMax Максимум SAR Bluto — Максимальное значение параболического SAR для трейлинг-стопа типа 8
Получить полный код

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

#include <stdlib.mqh>

#define AUDCAD 1
#define AUDJPY 2
#define AUDNZD 3
#define AUDUSD 4
#define CHFJPY 5
#define EURAUD 6
#define EURCAD 7
#define EURCHF 8
#define EURGBP 9
#define EURJPY 10
#define EURUSD 11
#define GBPCHF 12
#define GBPJPY 13
#define GBPUSD 14
#define NZDJPY 15
#define NZDUSD 16
#define USDCAD 17
#define USDCHF 18
#define USDJPY 19
#define UNEXPECTED 999

extern string  Expert_Name    = "---- MFI_R2_EA_v2.3 ----";

extern double  LotSize=0.1;
extern double  RiskPercent=2.0;
extern bool    UseMoneyMgmt=false;
extern bool    BrokerPermitsFractionalLots = true;

extern string  mi="--Moving Average settings--";
extern int     MaTrend_Period = 200;

extern string  ri="--MFI settings--";
extern int     MFI_Period = 5;       // input value to be optimized
extern bool    UseDefaultMFI_Period = true;
extern int     BuyWhenMFIBelow = 65;
extern int     SellWhenMFIAbove = 35;
extern double  MFI_Overbought_Value = 75.0; 
extern double  MFI_Oversold_Value = 25.0;

extern int     useMFI4BarsBack = 0;
extern int     BuyWhenAbove = 55;
extern int     SellWhenBelow = 45;

extern int     useNewExitStrategy = 0;
extern int     MFI_High_OverBought_Exit = 98;
extern int     MFI_Low_OverSold_Exit = 2;

extern int     use200SMA_Exit = 1;
extern int     useMFI14_Exit = 1;
extern int     MFI_Exit_Period = 14;
extern int     useCCI50_Exit = 0;
extern int     CCI_ExitLevel = 0;

extern string  st1="--Signal_TimeFrame--";
extern int     Signal_TimeFrame = 0;

extern string  hd = " --Limit 1 trade per day --";
extern int     useDelay = 1;

extern string  ai="--Moving Average Angle filter settings--";
extern string  a2=" Set switch to 1 to use filter";
extern int     useMaAngleFilter = 0;
extern int     TrendTimeFrame = 0;
extern double  Threshold=20;
extern int     PrevShift=3;
extern int     CurShift=1;

extern string  st6 = "--Profit Controls--";
extern double  StopLoss=0;
extern double  TakeProfit=700;
extern int     Slippage=3;

extern string  tsp0 = "--Trailing Stop Types--";
extern string  tsp1 = " 1 = Trail immediately";
extern string  tsp2 = " 2 = Wait to trail";
extern string  tsp3 = " 3 = Uses 3 levels before trail";
extern string  tsp4 = " 4 = Breakeven + Lockin";
extern string  tsp5 = " 5 = Step trail";
extern string  tsp6 = " 6 = EMA trail";
extern string  tsp7 = " 7 = pSAR trail";
extern string  tsp8 = " 8 = Blutos pSar trail";
extern bool    UseTrailingStop = true;
extern int     TrailingStopType = 8;

extern string  ts2 = "Settings for Type 2";
extern double  TrailingStop = 15;      // Change to whatever number of pips you wish to trail your position with.

extern string  ts3 = "Settings for Type 3";
extern double  FirstMove = 20;        // Type 3  first level pip gain
extern double  FirstStopLoss = 50;    // Move Stop to Breakeven
extern double  SecondMove = 30;       // Type 3 second level pip gain
extern double  SecondStopLoss = 30;   // Move stop to lock is profit
extern double  ThirdMove = 40;        // type 3 third level pip gain
extern double  TrailingStop3 = 20;    // Move stop and trail from there

extern string  ts4 = "Settings for Type 4";
extern double  BreakEven = 30;
extern int     LockInPips = 1;        // Profit Lock in pips

extern string  ts5 = "Settings for Type 5";
extern int     eTrailingStop   = 10;
extern int     eTrailingStep   = 2;

extern string  ts6 = "Settings for Type 6";
extern int     EMATimeFrame    =  30;
extern int     Price           =  0;
extern int     EMAPeriod       = 13;
extern int     EMAShift        =  2;    
extern int     InitialStop     =  0;

extern string  ts7 = "Settings for Type 7";
extern string  pi="--pSAR settings--";
extern double  StepParabolic = 0.02;
extern double  MaxParabolic  = 0.2;
extern int     Interval      = 5;

extern string  ts8 = "Settings for Type 8";
extern string  pi2="--pSAR settings--";
extern double  SarStep = 0.02;
extern double  SarMax = 0.20;

int            MagicNumber=0;
string         setup;
int            SignalCandle = 1;
int            TradesInThisSymbol = 0;
double         MM_OrderLotSize=0;
datetime       StopTime;                 // Time to wait after a trade is stopped out
bool           StoppedOut=false;

int            myMFI_Period = 2;     // Used by MFI indicator call
double         MFI_Day_0 = 0, MFI_Day_1=0, MFI_Day_2=0, MFI_Day_3=0, SMA_Day3=0;

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

int deinit()
{
 return(0);
}

int AssignMFI_Period(string symbol)
{

   int MFI = 0;
   int which = func_Symbol2Val(symbol);

   switch (which)
   {
        case AUDCAD : MFI = 5;
                      break;
        case AUDJPY : MFI = 7;
                      break;
        case AUDNZD : MFI = 6;
                      break;
        case AUDUSD : MFI = 4;
                      break;
        case CHFJPY : MFI = 4;
                      break;
        case EURAUD : MFI = 2;
                      break;
        case EURCAD : MFI = 3;
                      break;
        case EURCHF : MFI = 3;
                      break;
        case EURGBP : MFI = 2;
                      break;
        case EURJPY : MFI = 4;  // Optimized value
                      break;
        case EURUSD : MFI = 4;
                      break;
        case GBPCHF : MFI = 6;
                      break;
        case GBPJPY : MFI = 4;
                      break;
        case GBPUSD : MFI = 3;
                      break;
        case NZDJPY : MFI = 6;
                      break;
        case NZDUSD : MFI = 7;
                      break;
        case USDCAD : MFI = 2;
                      break;
        case USDCHF : MFI = 4;
                      break;
        case USDJPY : MFI = 4;
                      break;
        case UNEXPECTED : MFI = 4;
   }
   if (MFI == 0) MFI = 4;
   return (MFI);
}

bool LastTradeClosedToday()
{
   int cnt, total;
   bool Closed;

   total = HistoryTotal();
   for (cnt = total - 1; cnt >= 0; cnt--)
   {
      OrderSelect (cnt, SELECT_BY_POS, MODE_HISTORY);

      if(OrderSymbol()!=Symbol()) continue;
      if (OrderMagicNumber() != MagicNumber) continue;

        Closed = false;
        if (OrderType() == OP_BUY)
        {
          if (TimeDay(OrderCloseTime()) == TimeDay(TimeCurrent()))
          {
             Closed = true;
          }
          cnt = 0;
        }
        if (OrderType() == OP_SELL)
        {
          if (TimeDay(OrderCloseTime()) == TimeDay(TimeCurrent()))
          {
             Closed = true;
          }
          cnt = 0;
        }

   }

   return (Closed);
}

double MA_Angle( int iPrevShift, int iCurShift, double fPrevMA, double fCurMA)
{
   double fAngle, mFactor;
   string Sym;
   int ShiftDif;

   mFactor = 100000.0;
   Sym = StringSubstr(Symbol(),3,3);
   if (Sym == "JPY") mFactor = 1000.0;
   ShiftDif = iPrevShift-iCurShift;
   mFactor /= ShiftDif; 

    fAngle = mFactor * (fCurMA - fPrevMA)/2.0;

    return(fAngle);
}

bool CheckTrend(int cmd)
{
	double maAngle;

   double MACurrent=iMA(Symbol(),TrendTimeFrame,MaTrend_Period, 0, MODE_SMA, PRICE_CLOSE,CurShift);
   double MAPrevious=iMA(Symbol(),TrendTimeFrame,MaTrend_Period, 0, MODE_SMA, PRICE_CLOSE,PrevShift);
	maAngle = MA_Angle(PrevShift, CurShift, MAPrevious, MACurrent);
   switch (cmd)
   {
      case OP_BUY : if (maAngle > Threshold) return(true);
                    break;
      case OP_SELL : if (maAngle < -Threshold) return(true);
   }
   return(false);
}

bool CheckMFI14(int cmd)
{

   double MFIcur, MFIprev;

   MFIcur = iMFI(Symbol(),Signal_TimeFrame, MFI_Exit_Period, 1);
   MFIprev = iMFI(Symbol(),Signal_TimeFrame, MFI_Exit_Period, 2);

   switch (cmd)
   {
     case OP_BUY  : if (MFIcur < 50 && MFIprev > 50) return(true);
                    break;
     case OP_SELL : if (MFIcur > 50 && MFIprev < 50) return(true);
   }

   return(false);

}

bool CheckCCI50(int cmd)
{
   double CCIcur, CCIprev;

   CCIcur = iCCI(Symbol(), Signal_TimeFrame, 50, PRICE_CLOSE, 1);
   CCIprev = iCCI(Symbol(), Signal_TimeFrame, 50, PRICE_CLOSE, 2);

   switch (cmd)
   {
     case OP_BUY  : if (CCIcur < 0 && CCIprev > 0) return(true);
                    break;
     case OP_SELL : if (CCIcur > 0 && CCIprev < 0) return(true);
   }

   return(false);

}

bool CheckExitCondition(int cmd)
{
   double MFI, MFI_Cur;

   MFI = iMFI(Symbol(), Signal_TimeFrame, myMFI_Period, 1);
   MFI_Cur = iMFI(Symbol(), Signal_TimeFrame, myMFI_Period, 0);

   switch (cmd)
   {
   case OP_BUY : if (useMFI14_Exit == 1) return (CheckMFI14(cmd));
                 if (useCCI50_Exit == 1) return(CheckCCI50(cmd));

                 if ( MFI > MFI_Overbought_Value)
                 {
                    if (useNewExitStrategy == 1)
                    {
                       if (MFI_Cur < MFI_Overbought_Value || MFI_Cur >= MFI_High_OverBought_Exit ) return(true); else return(false);
                    }
                    else
                      return(true);
                 }
                 else if (use200SMA_Exit == 1)
                 {
                     if (CheckMA(OP_SELL)) return(true);
                 }
                break;
   case OP_SELL : if (useMFI14_Exit == 1)  return (CheckMFI14(cmd));
                  if (useCCI50_Exit == 1)  return(CheckCCI50(cmd));

                  if (MFI < MFI_Oversold_Value)
                  {
                    if (useNewExitStrategy == 1)
                    {
                       if (MFI_Cur > MFI_Oversold_Value || MFI_Cur <= MFI_Low_OverSold_Exit ) return(true); else return(false);
                    }
                    else
                      return(true);
                  }
                  else if (use200SMA_Exit == 1)
                  {
                     if (CheckMA(OP_BUY)) return(true);
                  }
   }

   return (false);
}

bool CheckMA(int cmd)
{
  SMA_Day3 = iMA(Symbol(),Signal_TimeFrame,MaTrend_Period, 0, MODE_SMA, PRICE_CLOSE, 1);
  switch (cmd)
  {
  case OP_BUY : if (iClose(Symbol(),Signal_TimeFrame,1) > SMA_Day3) return(true);
                break;
  case OP_SELL : if (iClose(Symbol(),Signal_TimeFrame,1) < SMA_Day3) return (true);
  }
  return(false);
}

bool CheckMFI(int cmd)
{

  MFI_Day_0 = iMFI(Symbol(), Signal_TimeFrame, myMFI_Period, 4);
  MFI_Day_1 = iMFI(Symbol(), Signal_TimeFrame, myMFI_Period, 3);
  MFI_Day_2 = iMFI(Symbol(), Signal_TimeFrame, myMFI_Period, 2);
  MFI_Day_3 = iMFI(Symbol(), Signal_TimeFrame, myMFI_Period, 1);

  switch (cmd)
  {
  case OP_BUY : if (MFI_Day_1 < BuyWhenMFIBelow && MFI_Day_2 < MFI_Day_1 && MFI_Day_3 < MFI_Day_2)
                {
                   if (useMFI4BarsBack == 1)
                   {
                      if (MFI_Day_0 > BuyWhenAbove) return(true); else return(false);
                   }
                   else
                     return(true);
                }
                break;

  case OP_SELL : if (MFI_Day_1 > SellWhenMFIAbove && MFI_Day_2 > MFI_Day_1 && MFI_Day_3 > MFI_Day_2)
                 {
                   if (useMFI4BarsBack == 1)
                   {
                      if (MFI_Day_0 < SellWhenBelow) return(true); else return(false);
                   }
                   else
                     return(true);
                 }
  }

  return(false);
}

bool CheckEntryCondition(int cmd)
{
   bool rule1, rule2, rule3;

   rule1 = true;
   rule2 = true;
   rule3 = true;

   rule1 = CheckMA(cmd);
   if (rule1)
   {
      rule2 = CheckMFI(cmd);
      if(rule2)
      {
        if (useMaAngleFilter == 1) rule3 = CheckTrend(cmd);
        if (rule3) return(true);
      }

   }
   return (false);
}

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

double GetLots()
{

double         MM_MinLotSize=0;
double         MM_MaxLotSize=0;
double         MM_LotStep=0;
double         MM_Decimals=0;
int            MM_AcctLeverage=0;
int            MM_CurrencyLotSize=0;

 double OrderLotSize;

  MM_AcctLeverage = AccountLeverage();
  MM_MinLotSize = MarketInfo(Symbol(),MODE_MINLOT);
  MM_MaxLotSize = MarketInfo(Symbol(),MODE_MAXLOT);
  MM_LotStep = MarketInfo(Symbol(),MODE_LOTSTEP);
  MM_CurrencyLotSize = MarketInfo(Symbol(),MODE_LOTSIZE);

  if(MM_LotStep == 0.01) {MM_Decimals = 2;}
  if(MM_LotStep == 0.1) {MM_Decimals = 1;}

  if (UseMoneyMgmt == true)
   {
    OrderLotSize = AccountEquity() * (RiskPercent * 0.01) / (MM_CurrencyLotSize / MM_AcctLeverage);
    if(BrokerPermitsFractionalLots == true)
      OrderLotSize = StrToDouble(DoubleToStr(OrderLotSize,MM_Decimals));
    else
      OrderLotSize = MathRound(MM_OrderLotSize);
   }
   else
   {
    OrderLotSize = LotSize;
   }

  if (OrderLotSize < MM_MinLotSize) {OrderLotSize = MM_MinLotSize;}
  if (OrderLotSize > MM_MaxLotSize) {OrderLotSize = MM_MaxLotSize;}
  return(OrderLotSize);

}

int OpenBuyOrder(double mLots, double mStopLoss, double mTakeProfit, int mSlippage, string mComment, int mMagic, color mColor)
{
   int err,ticket, digits;
   double myPrice, myBid, myStopLoss = 0, myTakeProfit = 0;

   myPrice = MarketInfo(Symbol(), MODE_ASK);
   myBid = MarketInfo(Symbol(), MODE_BID);
   myStopLoss = StopLong(myBid,mStopLoss);
   myTakeProfit = TakeLong(myBid,mTakeProfit);

   digits = MarketInfo(Symbol( ), MODE_DIGITS) ;
   if (digits > 0) 
   {
     myPrice = NormalizeDouble( myPrice, digits);
     myStopLoss = NormalizeDouble( myStopLoss, digits);
     myTakeProfit = NormalizeDouble( myTakeProfit, digits); 
   }
   ticket=OrderSend(Symbol(),OP_BUY,mLots,myPrice,mSlippage,myStopLoss,myTakeProfit,mComment,mMagic,0,mColor); 
   if (ticket > 0)
   {
    if (OrderSelect( ticket,SELECT_BY_TICKET, MODE_TRADES) ) 
     {
      Print("BUY order opened : ", OrderOpenPrice( ));

     }
   }
   else
   {
      err = GetLastError();
      if(err==0)
      { 
         return(ticket);
      }
      else
      {
         if(err==4 || err==137 ||err==146 || err==136) //Busy errors
         {
            Sleep(5000);
         }
         else //normal error
         {
           Print("Error opening BUY order [" + setup + "]: (" + err + ") " + ErrorDescription(err)); 
         }  
      }
   }

   return(ticket);
}

void OpenSellOrder(double mLots, double mStopLoss, double mTakeProfit, int mSlippage, string mComment, int mMagic, color mColor)
{
   int err, ticket, digits;
   double myPrice, myAsk, myStopLoss = 0, myTakeProfit = 0;

   myPrice = MarketInfo(Symbol( ), MODE_BID);
   myAsk = MarketInfo(Symbol( ), MODE_ASK);
   myStopLoss = StopShort(myAsk,mStopLoss);
   myTakeProfit = TakeShort(myAsk,mTakeProfit);

   digits = MarketInfo(Symbol( ), MODE_DIGITS) ;
   if (digits > 0) 
   {
     myPrice = NormalizeDouble( myPrice, digits);
     myStopLoss = NormalizeDouble( myStopLoss, digits);
     myTakeProfit = NormalizeDouble( myTakeProfit, digits); 
   }
   ticket=OrderSend(Symbol(),OP_SELL,mLots,myPrice,mSlippage,myStopLoss,myTakeProfit,mComment,mMagic,0,mColor); 
   if (ticket > 0)
   {
     if (OrderSelect( ticket,SELECT_BY_TICKET, MODE_TRADES) ) 
     {
      Print("Sell order opened : ", OrderOpenPrice());

     }
   }
   else
   {
      err = GetLastError();
      if(err==0)
      { 
         return(ticket);
      }
      else
      {
        if(err==4 || err==137 ||err==146 || err==136) //Busy errors
        {
           Sleep(5000)

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

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

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

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

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

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

Стоимость полного кода
2 499,80₽ ≈ $30.55