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

WSFR v3.8.5.1 FINAL

wsfr v3.8.5.1 final.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, работающий на таймфрейме M15. Использует набор технических индикаторов (скользящая средняя, CCI, ATR, WPR) для формирования сигналов на открытие и закрытие позиций. Поддерживает как длинные, так и короткие сделки с настраиваемыми фильтрами входа и выхода. Реализует управление рисками через стоп-лосс, тейк-профит, трейлинг-стоп и защиту прибыли, а также режим восстановления позиции и автоматическое управление лотом.

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

НастройкаОписание
_TP Группа Take Profit — Текстовый разделитель группы параметров Take Profit.
(10 2 60) (TakeProfit) Take Profit — Уровень фиксации прибыли в пунктах.
(100 10 200) (StopLoss) Stop Loss — Уровень стоп-лосса в пунктах.
????????? ???????? ???????. ???? ?????????, ?? ???????? ?????? ??????????? ????? ? ?????. (UseStopLevels) Use Stop Levels — Включает отдельную обработку стоп-лосса и тейк-профита при модификации ордеров.
????????? ????????? ?????????? ???????? ??????? (??????? ?????????, ????? ????????????) (IsMarketExecution) Is Market Execution — Использовать режим рыночного исполнения с последующей установкой стоп-лосса и тейк-профита через модификацию ордера.
(0 1 5) ????? ? ????????? (SecureProfit) Secure Profit — Уровень защиты прибыли в пунктах.
(10 2 30) ???? 0 - ?? ???????? (SecureProfitTriger) Secure Profit Trigger — Порог срабатывания защиты прибыли в пунктах; 0 отключает функцию.
(-200 5 -20) ???????????? ???????? ??? ???????? ??????? Buy ? Sell ??? ????????? ??????? (??? ?????? (MaxLossPoints) Max Loss Points — Максимальная допустимая убыточная глубина позиции в пунктах перед принудительным закрытием.
_tral Группа Trailing Stop — Текстовый разделитель группы параметров трейлинг-стопа.
(0.04 0.05 0.99 ??? 1 1 30) ???? 0 - ?? ????????, ???? ????? 1 - ?? ? ????? ?? ??????? (???????? 0.2 (TrailingStop) Trailing Stop — Значение трейлинг-стопа; 0 отключает функцию.
(0 1 30) ??? ????? (TrailingStep) Trailing Step — Шаг сдвига трейлинг-стопа в пунктах.
(0 1 30) ???????? ??????? ??? ??????? ?????????? ???? (Utral) Utral — Параметр, используемый в логике трейлинг-стопа для определения минимального удаления от цены открытия.
_MM Группа Money Management — Текстовый разделитель группы параметров управления денежными средствами.
????????? ?????? ?????????????? ???????? (?????????? ???? ???? ???????? ????-????) (RecoveryMode) Recovery Mode — Включает режим восстановления позиции после серии убытков с изменением размера лота.
????????????? ????? ???? (FixedLot) Fixed Lot — Фиксированный размер лота при отключённом автоматическом управлении.
?? ?????????? ???? AutoMM > 0. ??????? ?????. ??? RecoveryMode = FALSE, ?????? ????? ?????? ??? ???? (AutoMM) Auto MM — Автоматический расчёт лота; значение больше 0 включает функцию.
???????????? ???? (AutoMM_Max) Auto MM Max — Максимальное значение автоматического расчёта лота.
????? ???????? ????? ??????? ??? ???????(???????????? ??? RecoveryMode = True) (MaxAnalizCount) Max Analiz Count — Максимальное количество анализируемых исторических ордеров для расчёта лота.
???? ?? ???????? (???????????? ??? RecoveryMode = True) (Risk) Risk — Параметр риска, используемый при расчёте размера лота в режиме восстановления.
??????????? ????????? ???? (???????????? ??? RecoveryMode = True) (MultiLotPercent) Multi Lot Percent — Множитель увеличения лота при расчёте в режиме восстановления.
_Periods Группа Периодов индикаторов — Текстовый разделитель группы настроек периодов технических индикаторов.
(60 5 100) (iMA_Period) MA Period — Период скользящей средней.
(10 2 30) (iCCI_Period) CCI Period — Период индикатора CCI.
(10 2 30) (!) ????? ?? ?????? (iATR_Period) ATR Period — Период индикатора ATR.
(10 1 20) (iWPR_Period) WPR Period — Период индикатора WPR.
????? ??????????. ????? ???? ????? ?? ???????? ??????? ??????????? ???????? (Moving Average). (maMethod) MA Method — Метод расчёта скользящей средней (SMA, EMA, SMMA, LWMA).
maPrice MA Price — Тип цены для расчёта скользящей средней.
_Add_Op Группа дополнительных операций — Текстовый разделитель группы дополнительных операций.
_AddOpenFilters Группа фильтров открытия — Текстовый разделитель группы фильтров открытия сделок.
(0 1 10) ???????? ?? ???? ?? ATR ??? Buy ? Sell (if (iATR_Signal <= FilterATR * pp) return (0);) (!) (FilterATR) Filter ATR — Множитель ATR для фильтрации сигналов открытия; если ATR ниже порога, сигнал отклоняется.
(100 10 400) ?????? ?? iCCI ??? Buy ? Sell. ??? ??????????? ??? JPY ???????????? ?????? ?? ??????? ( (iCCI_OpenFilter) CCI Open Filter — Пороговое значение CCI для фильтрации сигналов открытия.
_OpenOrderFilters Группа фильтров открытия ордеров — Текстовый разделитель группы фильтров открытия ордеров.
(4 2 20) ?????? ?? ??? ???????? Buy ? Sell (?????) (iMA_Filter_Open_a) MA Filter Open a — Пороговое отклонение цены от MA для первого условия фильтра открытия.
(14 2 50) ?????? ?? ??? ???????? Buy ? Sell (?????) (iMA_Filter_Open_b) MA Filter Open b — Пороговое отклонение цены от MA для второго условия фильтра открытия.
(-100 1 0) ?????? WPR ??? ???????? Buy ? Sell (iWPR_Filter_Open_a) WPR Filter Open a — Пороговое значение WPR для фильтрации сигналов открытия в длинную сторону.
(-100 1 0) ?????? WPR ??? ???????? Buy ? Sell (iWPR_Filter_Open_b) WPR Filter Open b — Пороговое значение WPR для фильтрации сигналов открытия в короткую сторону.
_CloseOrderFilters Группа фильтров закрытия ордеров — Текстовый разделитель группы фильтров закрытия ордеров.
(10 2 20) ?????? ???? ???????? ??? ???????? Buy ? Sell (?????) (Price_Filter_Close) Price Filter Close — Минимальное ценовое смещение для условия закрытия позиции по ценовому фильтру.
(0 1 -100) ?????? WPR ??? ???????? Buy ? Sell (iWPR_Filter_Close) WPR Filter Close — Пороговое значение WPR для фильтрации сигналов закрытия позиции.
_Add Группа дополнительных настроек — Текстовый разделитель группы дополнительных параметров.
??????????? ??????? ??????? (LongTrade) Long Trade — Разрешает открытие длинных (Buy) позиций.
??????????? ???????? ??????? (ShortTrade) Short Trade — Разрешает открытие коротких (Sell) позиций.
????????????? ???????? ?????? Buy ? ?????? Sell ??????. ??? True ?? ?????????. (No_Hedge_Trades) No Hedge Trades — Запрещает одновременное открытие позиций Buy и Sell по одному символу.
??? True ???????? ????? ????????? ?????? 1 ????? ? 1 ?????. (? ?????? ?????? ?? ????? ??? 1 ??? ? 15 (OneOrderInBarMode) One Order In Bar Mode — Ограничивает открытие не более одной позиции в одном баре.
??? ??????????? ???????????? ???????? (???????? ??????????? ? 2 ????) (Optimization) Optimization — Включает режим оптимизации с ограничением частоты обновления сигналов.
MagicNumber Magic Number — Магический номер для идентификации ордеров советника.
MaxSpread Max Spread — Максимально допустимый спред в пунктах для открытия сделки.
??????????????? ??? ???????? ?????? (OpenSlippage) Open Slippage — Допустимое проскальзывание при открытии ордера в пунктах.
??????????????? ??? ???????? ?????? (CloseSlippage) Close Slippage — Допустимое проскальзывание при закрытии ордера в пунктах.
???????????? ????? ?????????? ??? ????????/???????? ?????? ??? ???????? ? ?????? ??????? (RequoteAttempts) Requote Attempts — Количество попыток повторного отправки ордера при перекотировке.
//--- ????????? ??????????? ???? ? ?????????. (WriteLog) Write Log — Включает запись сообщений в журнал терминала.
????????? ??????????? ???? ?? ??????? ? ?????????. (WriteDebugLog) Write Debug Log — Включает подробную отладочную запись в журнал.
????????? ???????????? ?? ??????? (??? ???????????? ??????????? ?????????????) (PrintLogOnChart) Print Log On Chart — Отображает информационный комментарий на графике с текущими параметрами и состоянием.
Получить полный код

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

extern string _TP = "???????? ??????? ?????????";

extern int TakeProfit = 26; //--- (10 2 60)
extern int StopLoss = 120; //--- (100 10 200)
extern bool UseStopLevels = TRUE; //--- ????????? ???????? ???????. ???? ?????????, ?? ???????? ?????? ??????????? ????? ? ?????.
extern bool IsMarketExecution = FALSE; //--- ????????? ????????? ?????????? ???????? ??????? (??????? ?????????, ????? ????????????)

extern int SecureProfit = 1; //--- (0 1 5) ????? ? ?????????
extern int SecureProfitTriger = 10; //--- (10 2 30) ???? 0 - ?? ????????
extern int MaxLossPoints = -65; //--- (-200 5 -20) ???????????? ???????? ??? ???????? ??????? Buy ? Sell ??? ????????? ??????? (??? ???????? ?????? ?? - MaxLossPoints ??? ?????? (???????? ??????? 0), ????? ?????????)

extern string _tral = "????????? ?????";
extern double TrailingStop = 0; //--- (0.04 0.05 0.99 ??? 1 1 30) ???? 0 - ?? ????????, ???? ????? 1 - ?? ? ????? ?? ??????? (???????? 0.25), ???? ????? 1 - ?? ???????
extern double TrailingStep = 0; //--- (0 1 30) ??? ?????
extern double Utral = 10; //--- (0 1 30) ???????? ??????? ??? ??????? ?????????? ????

extern string _MM = "????????? MM";

extern bool RecoveryMode = FALSE; //--- ????????? ?????? ?????????????? ???????? (?????????? ???? ???? ???????? ????-????)
extern double FixedLot = 0.1; //--- ????????????? ????? ????
extern double AutoMM = 0.0; //--- ?? ?????????? ???? AutoMM > 0. ??????? ?????. ??? RecoveryMode = FALSE, ?????? ????? ?????? ??? ????????.

extern double AutoMM_Max = 20.0; //--- ???????????? ????
extern int MaxAnalizCount = 50; //--- ????? ???????? ????? ??????? ??? ???????(???????????? ??? RecoveryMode = True)
extern double Risk = 25.0; //--- ???? ?? ???????? (???????????? ??? RecoveryMode = True)
extern double MultiLotPercent = 1.1; //--- ??????????? ????????? ???? (???????????? ??? RecoveryMode = True)

extern string _Periods = "??????? ???????????";

extern int iMA_Period = 75; //--- (60 5 100)
extern int iCCI_Period = 18; //--- (10 2 30)
extern int iATR_Period = 14; //--- (10 2 30) (!) ????? ?? ??????
extern int iWPR_Period = 11; //--- (10 1 20)
extern int  maMethod = 2; //--- ????? ??????????. ????? ???? ????? ?? ???????? ??????? ??????????? ???????? (Moving Average).

/*
{
   MODE_SMA    0    ??????? ?????????? ???????
   MODE_EMA    1    ???????????????? ?????????? ??????? *
   MODE_SMMA    2    ?????????? ?????????? ???????
   MODE_LWMA    3    ???????-?????????? ?????????? ???????
}
*/
extern int  maPrice = 0;

extern string _Add_Op = "??????????? ????????? ???????????";

extern string _AddOpenFilters = "---";

extern int FilterATR = 6; //--- (0 1 10) ???????? ?? ???? ?? ATR ??? Buy ? Sell (if (iATR_Signal <= FilterATR * pp) return (0);) (!) ????? ?? ??????
extern double iCCI_OpenFilter = 150; //--- (100 10 400) ?????? ?? iCCI ??? Buy ? Sell. ??? ??????????? ??? JPY ???????????? ?????? ?? ??????? (100 50 4000)

extern string _OpenOrderFilters = "---";

extern int iMA_Filter_Open_a = 15; //--- (4 2 20) ?????? ?? ??? ???????? Buy ? Sell (?????)
extern int iMA_Filter_Open_b = 39; //--- (14 2 50) ?????? ?? ??? ???????? Buy ? Sell (?????)
extern int iWPR_Filter_Open_a = -99; //--- (-100 1 0) ?????? WPR ??? ???????? Buy ? Sell
extern int iWPR_Filter_Open_b = -95; //--- (-100 1 0) ?????? WPR ??? ???????? Buy ? Sell

extern string _CloseOrderFilters = "---";

extern int Price_Filter_Close = 14; //--- (10 2 20) ?????? ???? ???????? ??? ???????? Buy ? Sell (?????)
extern int iWPR_Filter_Close = -19; //--- (0 1 -100) ?????? WPR ??? ???????? Buy ? Sell

extern string _Add = "??????????? ?????????";
extern bool LongTrade = TRUE; //--- ??????????? ??????? ???????
extern bool ShortTrade = TRUE; //--- ??????????? ???????? ???????
extern bool No_Hedge_Trades = TRUE; //--- ????????????? ???????? ?????? Buy ? ?????? Sell ??????. ??? True ?? ?????????.
extern bool OneOrderInBarMode = TRUE; //--- ??? True ???????? ????? ????????? ?????? 1 ????? ? 1 ?????. (? ?????? ?????? ?? ????? ??? 1 ??? ? 15 ?????). ? ??????? ?? ????????, ??? ??? ????????? ??? ? 10 ???.
extern bool Optimization = FALSE; //--- ??? ??????????? ???????????? ???????? (???????? ??????????? ? 2 ????)
extern int MagicNumber = 777;
extern double MaxSpread = 2;
extern double OpenSlippage = 2; //--- ??????????????? ??? ???????? ??????
extern double CloseSlippage = 3; //--- ??????????????? ??? ???????? ??????
extern int RequoteAttempts = 3; //--- ???????????? ????? ?????????? ??? ????????/???????? ?????? ??? ???????? ? ?????? ???????
extern bool WriteLog = TRUE; //--- //--- ????????? ??????????? ???? ? ?????????.
extern bool WriteDebugLog = TRUE; //--- ????????? ??????????? ???? ?? ??????? ? ?????????.
extern bool PrintLogOnChart = TRUE; //--- ????????? ???????????? ?? ??????? (??? ???????????? ??????????? ?????????????)

double K;
double pp;
int pd;
double cf;
string EASymbol; //--- ??????? ??????
int SP;
int CloseSP;
int MaximumTrades = 1;
int CountBars;
double NDMaxSpread; //--- ???????????? ????? ????? ???????
bool CheckSpreadRuleBuy; //--- ??????? ??? ???????? ?????? ????? ????????? (????????????? ???????????? ????????? ? ??????????? ??????)
bool CheckSpreadRuleSell;
string OpenOrderComment = "WSFR v3.8.5.1 FINAL";
int RandomOpenTimePercent = 0; //--- ???????????? ??? ??????? ?????? ??????? ?????????, ??????????? ????????? ?????. ?????????? ? ????????.

double MinLot = 0.01;
double MaxLot = 0.01;
double LotStep = 0.01;
int LotValue = 100000;
double FreeMargin = 1000.0;
double LotPrice = 1;
double LotSize;

int iWPR_Filter_OpenLong_a;
int iWPR_Filter_OpenLong_b;
int iWPR_Filter_OpenShort_a;
int iWPR_Filter_OpenShort_b;

int iWPR_Filter_CloseLong;
int iWPR_Filter_CloseShort;

color OpenBuyColor = Blue;
color OpenSellColor = Red;
color CloseBuyColor = DodgerBlue;
color CloseSellColor = DeepPink;

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

void deinit() {

   if (ObjectFind("BKGR") >= 0) ObjectDelete("BKGR");
   if (ObjectFind("BKGR2") >= 0) ObjectDelete("BKGR2");
   if (ObjectFind("BKGR3") >= 0) ObjectDelete("BKGR3");
   if (ObjectFind("BKGR4") >= 0) ObjectDelete("BKGR4");
   if (ObjectFind("LV") >= 0) ObjectDelete("LV");

   return;

}

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

void Scalper() {

   bool OpenBuyRule = TRUE;
   bool OpenSellRule = TRUE;

   if (No_Hedge_Trades == TRUE && CheckOpenTrade(OP_SELL)) OpenBuyRule = FALSE;
   if (No_Hedge_Trades == TRUE && CheckOpenTrade(OP_BUY)) OpenSellRule = FALSE;

   if (IsNewBar()) {

      if (OpenLongSignal() && !CheckOpenTrade(OP_BUY) && OpenBuyRule && OneOrderInBar(OP_BUY) && LongTrade) {

         if (MaxSpreadFilter()) {
            if (!CheckSpreadRuleBuy && WriteDebugLog) {

            Print("???????? ?????? ?? ??????? ???????? ??-?? ???????? ??????.");
            Print("??????? ????? = ", DoubleToStr((Ask - Bid) / pp, 1), ",  MaxSpread = ", DoubleToStr(MaxSpread, 1));
            Print("??????? WSFR 3.8.5.1 ????? ????????? ?????, ????? ????? ?????? ??????????.");
            }

            CheckSpreadRuleBuy = TRUE;

         } else {

         CheckSpreadRuleBuy = FALSE;
         OpenPosition(OP_BUY);}
      }//--- ???????? if (OpenLongSignal()

      if (OpenShortSignal() && !CheckOpenTrade(OP_SELL) && OpenSellRule && OneOrderInBar(OP_SELL) && ShortTrade) {

         if (MaxSpreadFilter()) {
            if (!CheckSpreadRuleSell && WriteDebugLog) {

            Print("???????? ?????? ?? ??????? ???????? ??-?? ???????? ??????.");
            Print("??????? ????? = ", DoubleToStr((Ask - Bid) / pp, 1), ",  MaxSpread = ", DoubleToStr(MaxSpread, 1));
            Print("??????? WSFR 3.8.5.1 ????? ????????? ?????, ????? ????? ?????? ??????????.");
            }

            CheckSpreadRuleSell = TRUE;

         } else {

         CheckSpreadRuleSell = FALSE;
         OpenPosition(OP_SELL);}
      } //--- ????????  if (OpenShortSignal()
   }

   return;
}

void OpenPosition(int OpType) {

   int RandomOpenTime; //--- ???????? ?? ??????? ?? ????????
   color OpenColor; //--- ???? ???????? ???????. ???? Buy ?? ???????, ???? Sell ?? ???????
   int OpenOrder = 0; //--- ???????? ???????
   int OpenOrderError; //--- ?????? ????????
   string OpTypeString; //--- ?????????????? ???? ??????? ? ????????? ????????
   double OpenPrice; //--- ???? ????????
   int    maxtry = RequoteAttempts;
   int    lasterror = 0;
   double price = 0;

   double TP, SL;
   double OrderTP = NormalizeDouble (TakeProfit * pp , pd); //--- ??????????? ????-?????? ? ??? Points
   double OrderSL = NormalizeDouble (StopLoss * pp , pd); //--- ??????????? ????-???? ? ??? Points

   if (RandomOpenTimePercent > 0) {
      MathSrand(TimeLocal());
      RandomOpenTime = MathRand() % RandomOpenTimePercent;

      if (WriteLog) {
      Print("DelayRandomiser: ???????? ", RandomOpenTime, " ??????.");
      }

      Sleep(1000 * RandomOpenTime);
   } //--- ???????? if (RandomOpenTimePerc

   double OpenLotSize = LotSize; //--- ?????? ?????? ???????

   if (AccountFreeMarginCheck(EASymbol, OpType, OpenLotSize) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {

      if (WriteDebugLog) {

         Print("??? ???????? ?????? ???????????? ????????? ?????.");
         Comment("??? ???????? ?????? ???????????? ????????? ?????.");

      }
      return (-1);
   } //--- ???????? if (AccountFreeMarginCheck  

   RefreshRates();

   if (OpType == OP_BUY) {
      OpenPrice = NormalizeDouble(Ask, Digits);
      OpenColor = OpenBuyColor;

      if (UseStopLevels) { //--- ???? ???????? ????-?????? (????-???? ? ????-??????)

      TP = NormalizeDouble(OpenPrice + OrderTP, Digits); //--- ?? ??????????? ????-??????
      SL = NormalizeDouble(OpenPrice - OrderSL, Digits); //--- ? ????-????

      } else {TP = 0; SL = 0;}

   } else {
      OpenPrice = NormalizeDouble(Bid, Digits);
      OpenColor = OpenSellColor;

      if (UseStopLevels) {

      TP = NormalizeDouble(OpenPrice - OrderTP, Digits);
      SL = NormalizeDouble(OpenPrice + OrderSL, Digits);
      }

      else {TP = 0; SL = 0;}
   }

if (IsMarketExecution && UseStopLevels)
   {
   OpenOrder = OrderSend(EASymbol, OpType, OpenLotSize, OpenPrice, SP, 0, 0, OpenOrderComment, MagicNumber, 0, OpenColor);
   if (OpenOrder > 0)
      {
      ModifyOrder(EASymbol, OpenOrder, OrderOpenPrice(), SL, TP, 0);
      return(OpenOrder);
      }
   }

      else
   {
   OpenOrder = OrderSend(EASymbol, OpType, OpenLotSize, OpenPrice, SP, SL, TP, OpenOrderComment, MagicNumber, 0, OpenColor);
   if (OpenOrder > 0) return(OpenOrder);
   }

if ((OpType != OP_BUY) && (OpType != OP_SELL)) return(OpenOrder);

/*if (OpenOrder < 0) { //--- ???? ????? ?? ????????, ??
   OpenOrderError = GetLastError(); //--- ?????????? ??????

   if (WriteDebugLog) {
      if (OpType == OP_BUY) OpTypeString = "OP_BUY";
         else OpTypeString = "OP_SELL";
            Print("????????: OrderSend(", OpTypeString, ") ?????? = ", ErrorDescription(OpenOrderError)); //--- ??? ?????? ?? ???????
         } //--- ???????? if (WriteDebugLog)
}*/

lasterror = GetLastError();

if ((OpenOrder < 0) && ((lasterror == 135) || (lasterror == 138) || (lasterror == 146)))
   {
   Print("Requote. Error" + lasterror + ". Ticket: " + OpenOrder);
   }
      else
   {
   return(OpenOrder);
   }

price = OpenPrice;

for (int attempt = 1; attempt <= maxtry; attempt++)
   {
   RefreshRates();
   if (OpType == OP_BUY)
      {
      if (Ask <= price)
         {
         if (IsMarketExecution && UseStopLevels)
            {
            OpenOrder = OrderSend(EASymbol, OpType, OpenLotSize, NormalizeDouble(Ask,Digits), SP, 0, 0, OpenOrderComment, MagicNumber, 0, OpenColor);
            if (OpenOrder > 0)
               {
               ModifyOrder(EASymbol, OpenOrder, OrderOpenPrice(), SL, TP, 0);
               return(OpenOrder);
               }
            }
               else
            {
            OpenOrder = OrderSend(EASymbol, OpType, OpenLotSize, NormalizeDouble(Ask,Digits), SP, SL, TP, OpenOrderComment, MagicNumber, 0, OpenColor);
            if (OpenOrder > 0) return(OpenOrder);
            }
         if ((GetLastError() != 135) && (GetLastError() != 138) && (GetLastError() != 146)) return(OpenOrder);
         Print("Requote. " + "Attempt " + (attempt + 1));
         continue;
         }
      }
   if (OpType == OP_SELL)
      {
      if (Bid >= price)
         {
         if (IsMarketExecution && UseStopLevels)
            {
            OpenOrder = OrderSend(EASymbol, OpType, OpenLotSize, NormalizeDouble(Bid,Digits), SP, 0, 0, OpenOrderComment, MagicNumber, 0, OpenColor);
            if (OpenOrder > 0)
               {
               ModifyOrder(EASymbol, OpenOrder, OrderOpenPrice(), SL, TP, 0);
               return(OpenOrder);
               }
            }
               else
            {
            OpenOrder = OrderSend(EASymbol, OpType, OpenLotSize, NormalizeDouble(Bid,Digits), SP, SL, TP, OpenOrderComment, MagicNumber, 0, OpenColor);
            if (OpenOrder > 0) return(OpenOrder);
            }
         if ((GetLastError() != 135) && (GetLastError() != 138) && (GetLastError() != 146)) return(OpenOrder);
         Print("Requote. " + "Attempt " + (OpenOrder + 1));
         }
      }
   }

   return;

}

void ModifyOrders() {

   int total = OrdersTotal() - 1;
   int ModifyError = GetLastError();

   for (int i = total; i >= 0; i--) { //--- ??????? ???????? ???????
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if (WriteDebugLog) Print("????????? ?????? ?? ????? ??????? ??????. ???????: ", ErrorDescription(ModifyError));

      } else {

      if (OrderType() == OP_BUY&&SecureProfitTriger>0) {
         if (OrderMagicNumber() == MagicNumber && OrderSymbol() == EASymbol) {
            if (Bid - OrderOpenPrice() > SecureProfitTriger * pp && MathAbs(OrderOpenPrice() + SecureProfit * pp - OrderStopLoss()) >= Point
               &&NormalizeDouble(OrderOpenPrice() + SecureProfit * pp, Digits)>=OrderStopLoss()+Point) {

               ModifyOrder(EASymbol, OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() + SecureProfit * pp, Digits), OrderTakeProfit(), Blue);
               }
            }
         } //--- ???????? if (OrderType() == OP_BUY)

      if (OrderType() == OP_SELL&&SecureProfitTriger>0) {
         if (OrderMagicNumber() == MagicNumber && OrderSymbol() == EASymbol) {
            if (OrderOpenPrice() - Ask > SecureProfitTriger * pp && MathAbs(OrderOpenPrice() - SecureProfit * pp - OrderStopLoss()) >= Point
               &&NormalizeDouble(OrderOpenPrice() - SecureProfit * pp, Digits)<=OrderStopLoss()-Point) {

               ModifyOrder(EASymbol, OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() - SecureProfit * pp, Digits), OrderTakeProfit(), Red);
               }
            }
         } //--- ???????? if (OrderType() == OP_SELL)

    if(TrailingStop>1&&(OrderMagicNumber()== MagicNumber))
    {
      if(OrderType() == OP_SELL&&OrderOpenPrice() - Ask > Utral*Point*K)
      {
        if(TrailingStop> 0&&TrailingStop > 1)
        {
          if(OrderOpenPrice() - Ask >  TrailingStop * Point*K)
          {            
            if(OrderStopLoss()-Point* TrailingStep*K > (Ask + Point* TrailingStop*K)&&Ask + Point * TrailingStop*K<=OrderStopLoss()-Point)
            {           
              OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop*K,
               OrderTakeProfit(),0, CLR_NONE);

            }
          }
        }
      }
      else
        if(OrderType() == OP_BUY&&Bid - OrderOpenPrice() > Utral*Point*K)//||OrderMagicNumber()== MAGIC1)
        {
          if(TrailingStop > 0&&TrailingStop > 1)         
          {
            if(Bid - OrderOpenPrice() > TrailingStop * Point*K)
            {
              if(OrderStopLoss()+Point* TrailingStep*K < (Bid - Point * TrailingStop*K)&&Bid - Point * TrailingStop*K>=OrderStopLoss()+Point )
              {
                OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop*K,
                  OrderTakeProfit() ,0, CLR_NONE);

              }
            }
          }
        }
      }

     if(TrailingStop<1&&(OrderMagicNumber()== MagicNumber))
     {
      if(OrderType() == OP_SELL&&TrailingStop < 1)
      {
        if(TrailingStop> 0)
        {
          if(OrderOpenPrice() - Ask > Utral*Point*K)
          {            
            if(OrderStopLoss()-Point* TrailingStep*K > Ask + (OrderOpenPrice()-Ask)*TrailingStop&& Ask + (OrderOpenPrice()-Ask)*TrailingStop<=OrderStopLoss()-Point)
            {           
              OrderModify(OrderTicket(), OrderOpenPrice(), Ask + (OrderOpenPrice()-Ask)*TrailingStop,
               OrderTakeProfit(),0, CLR_NONE);

            }
          }
        }
      }
      else
        if(OrderType() == OP_BUY)
        {
          if(TrailingStop > 0&&TrailingStop < 1)         
          {
            if(Bid - OrderOpenPrice() > Utral*Point*K)
            {
              if(OrderStopLoss()+Point* TrailingStep*K  < Bid - (Bid - OrderOpenPrice())*TrailingStop&&Bid - (Bid - OrderOpenPrice())*TrailingStop>=OrderStopLoss()+Point)
              {
                OrderModify(OrderTicket(), OrderOpenPrice(), Bid - (Bid - OrderOpenPrice())*TrailingStop ,
                  OrderTakeProfit() ,0, CLR_NONE);

              }
            }
          }
        }
      }

      }
   } //--- ???????? for (int i = total - 1; i >= 0; i--)

   return;
}

void ModifyOrder(string sy="", int ticket=0, double pp=-1, double sl=0, double tp=0, color cl=CLR_NONE) {

   int ModifyTicketID = OrderTicket();

   if (sy=="") sy=Symbol();
   bool   fm; //--- ??????????? ??????
   int    dg, err, it;
   int    PauseAfterError = 5; //--- ????? ? ???????? ????? ????????? ???????????
   int    NumberOfTry = 10; //--- ???-?? ??????? ??????????? ??? ????????????? ??????

   if (pp<=0) pp=OrderOpenPrice();
   if (sl<0) sl=OrderStopLoss();
   if (tp<0) tp=OrderTakeProfit();

   dg=MarketInfo(sy, MODE_DIGITS);
   pp=NormalizeDouble(pp, dg);
   sl=NormalizeDouble(sl, dg);
   tp=NormalizeDouble(tp, dg);

   if (pp!=OrderOpenPrice() || sl!=OrderStopLoss() || tp!=OrderTakeProfit()) {

      for (it=1; it<=NumberOfTry; it++) {
         if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
         while (!IsTradeAllowed()) Sleep(5000);
         RefreshRates();

         fm = OrderModify(ticket, pp, sl, tp, 0, cl);
         if (fm==1) return(1);

         else {
         err=GetLastError();

         if (WriteDebugLog) Print("????????? ?????? ?? ????? ??????????? ?????? (", GetNameOP(OrderType()), ",", ModifyTicketID, "). ???????: ", ErrorDescription(err),". ??????? ?",it);

         Sleep(1000*PauseAfterError);

         } //--- ???????? if (!fm) {
      }
   }

   return;
}

void CloseOrders() {

   int total = OrdersTotal() - 1;
   int SelectCloseError = GetLastError();

   for (int i = total; i >= 0; i--) { //--- ??????? ???????? ???????
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if (WriteDebugLog) Print("????????? ?????? ?? ????? ??????? ??????. ???????: ", ErrorDescription(SelectCloseError));

      } else {

      if (OrderType() == OP_BUY) {
         if (OrderMagicNumber() == MagicNumber && OrderSymbol() == EASymbol) {
            if (Bid >= OrderOpenPrice() + TakeProfit * pp || Bid <= OrderOpenPrice() - StopLoss * pp || CloseLongSignal(OrderOpenPrice(), ExistPosition())) {

               CloseOrder(OrderTicket(),Bid);

            }
         }
      } //--- ???????? if (OrderType() == OP_BUY)

      if (OrderType() == OP_SELL) {
         if (OrderMagicNumber() == MagicNumber && OrderSymbol() == EASymbol) {
            if (Ask <= OrderOpenPrice() - TakeProfit * pp || Ask >= OrderOpenPrice() + StopLoss * pp || CloseShortSignal(OrderOpenPrice(), ExistPosition())) {

               CloseOrder(OrderTicket(),Ask);

               }
            }
         } //--- ???????? if (OrderType() == OP_SELL)
      } 
   } //--- ???????? for (int i = total - 1; i >= 0; i--) {

   return;
}

void CloseOrder(int ticket, double prce) {

double price;
int    slippage;
double p = prce;
int    maxtry = RequoteAttempts;
color  CloseColor;

OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);

int ordtype = OrderTyp

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

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

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

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

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

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

Стоимость полного кода
3 410,20₽ ≈ $41.68