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

WallStreet Forex Robot ver. 3.8.5 FINAL (Pirate Edition)

wall street + ozzy chiken leg 2012.mq4
Вы автор или правообладатель?

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

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

О программе

WallStreet Forex Robot ver. 3.8.5 FINAL (Pirate Edition) — это торговый экспертный советник для платформы MetaTrader 4, работающий на таймфрейме M15. Советник ориентирован на торговлю валютными парами EURUSD, GBPUSD, USDCHF, USDJPY, USDCAD и использует комбинацию нескольких технических индикаторов для формирования торговых сигналов на открытие и закрытие позиций.

Советник поддерживает фиксированный и автоматический режимы управления позициями (AutoMM), а также режим восстановления (RecoveryMode) для пересчёта лотов после убытков. Доступны настройки стоп-лосса, тейк-профита, фильтрации спреда, волатильности и ограничения количества ордеров в баре. Торговые операции выполняются через стандартный API OrderSend с обработкой реквот.

Робот открывает позиции Buy и Sell на основе совокупных сигналов индикаторов MA, CCI, ATR и WPR, модифицирует ордера для фиксации промежуточной прибыли и закрывает позиции при достижении целевых уровней или лимитов убытков. Встроена система логирования с выводом информации на график и в журнал.

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

НастройкаОписание
Name Название торгового советника.
Copy Строка с информацией об авторских правах.
Op2 Строковый параметр с описанием операции.
Symbol_Op Символ и таймфрейм торговли, например EURUSD m15.
Op Строковый параметр с описанием операции.
Date Дата оптимизации настроек, отображается в комментариях на графике.
_TP Строковый параметр с описанием настроек тейк-профита.
TakeProfit Тейк-профит в пунктах для открытых позиций.
StopLoss Стоп-лосс в пунктах для открытых позиций.
UseStopLevels Использование уровней стоп-лосс и тейк-профит при открытии ордера. При FALSE стоп-лосс и тейк-профит не устанавливаются.
IsMarketExecution Переключатель режима исполнения рыночного ордера (Market Execution). При включении стоп-лосс и тейк-профит устанавливаются после открытия ордера через OrderModify.
SecureProfit Количество пунктов для фиксации промежуточной прибыли при модификации ордера.
SecureProfitTriger Триггер в пунктах для активации фиксации промежуточной прибыли.
MaxLossPoints Максимальные точки убытка для длинных и коротких позиций Buy и Sell, при превышении которых позиции закрываются.
_MM Строковый параметр с описанием настроек управления денежными средствами.
RecoveryMode Режим восстановления для автоматического пересчёта размера лота после убытков. При True используется функция CalcLots для расчёта лота.
FixedLot Фиксированный размер лота при AutoMM = 0.
AutoMM Автоматическое управление денежными средствами. При AutoMM > 0 лот рассчитывается автоматически на основе свободных средств. При RecoveryMode = FALSE лот рассчитывается напрямую, при RecoveryMode = TRUE используется функция CalcLots.
AutoMM_Max Максимальное значение AutoMM для ограничения размера позиции.
MaxAnalizCount Максимальное количество анализируемых исторических ордеров при RecoveryMode = True.
Risk Процент риска для расчёта размера позиции при RecoveryMode = True.
MultiLotPercent Процент множителя лота при расчёте в режиме RecoveryMode.
_Vola Строковый параметр с описанием настроек фильтра волатильности.
VolaFilter Фильтр волатильности. Ограничивает открытие позиций при низкой волатильности на основе разницы High-Low последних баров M15.
_Periods Строковый параметр с описанием периодов индикаторов.
iMA_Period Период индикатора скользящей средней (Moving Average) с методом SMMA.
iCCI_Period Период индикатора CCI (Commodity Channel Index).
iATR_Period Период индикатора ATR (Average True Range) для расчёта волатильности.
iWPR_Period Период индикатора WPR (Williams Percent Range).
_Add_Op Строковый параметр с дополнительными описаниями операций.
_AddOpenFilters Строковый параметр с дополнительными фильтрами открытия.
FilterATR Фильтр ATR для открытия позиций Buy и Sell. Если значение iATR_Signal <= FilterATR * pp, сигнал отменяется.
iCCI_OpenFilter Пороговое значение iCCI для фильтрации сигналов открытия Buy и Sell. Для JPY-паров рекомендуется другое значение.
_OpenOrderFilters Строковый параметр с дополнительными фильтрами открытия ордеров.
iMA_Filter_Open_a Первый пороговый параметр фильтра MA для открытия позиций Buy и Sell.
iMA_Filter_Open_b Второй пороговый параметр фильтра MA для открытия позиций Buy и Sell.
iWPR_Filter_Open_a Первый пороговый параметр WPR для фильтрации сигналов открытия Buy и Sell.
iWPR_Filter_Open_b Второй пороговый параметр WPR для фильтрации сигналов открытия Buy и Sell.
_CloseOrderFilters Строковый параметр с дополнительными фильтрами закрытия.
Price_Filter_Close Ценовой фильтр для закрытия позиций Buy и Sell.
iWPR_Filter_Close Пороговое значение WPR для фильтрации сигналов закрытия позиций.
_Add Строковый параметр с дополнительными настройками.
LongTrade Разрешает открытие длинных (Buy) позиций. При False длинные позиции не открываются.
ShortTrade Разрешает открытие коротких (Sell) позиций. При False короткие позиции не открываются.
No_Hedge_Trades Запрет хеджевых сделок. При True нельзя одновременно иметь открытые позиции Buy и Sell. При True запрещается открытие противоположного направления.
OneOrderInBarMode При True разрешается только один ордер в баре (1 ордер на 1 свечу). При False — ограничение не применяется.
MagicNumber Магический номер для идентификации ордеров, управляемых советником.
MaxSpread Максимально допустимый спред для открытия позиций. При превышении открытие блокируется.
OpenSlippage Допустимое проскальзывание при открытии позиций.
CloseSlippage Допустимое проскальзывание при закрытии позиций.
RequoteAttempts Количество попыток повторного отправки ордера при реквотировании.
WriteLog Запись основных информационных сообщений в журнал.
WriteDebugLog Запись подробных отладочных сообщений в журнал для диагностики работы советника.
PrintLogOnChart Вывод информационных сообщений на график в виде комментариев.
Получить полный код

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

extern string Name = "WallStreet Forex Robot ver. 3.8.5 FINAL (Pirate Edition)";
extern string Copy = "Copyright ? HELLTEAM^Pirat";
extern string Op2 = "??????????? ??? ????";
extern string Symbol_Op = "EURUSD m15";
extern string Op = "???? ???????????";
extern datetime Date = D'12.05.2011'; //--- ?????? ????? ??? ????, ????? ?????? ?? ????? ???? ??????????? (???? ?????????? ???????)
extern string _TP = "???????? ??????? ?????????";

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

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

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

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

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

extern string _Vola = "?????? ?????????????";

extern int VolaFilter = 23; //--- (15 1 30)

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 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 = false; //--- ????????????? ???????? ?????? Buy ? ?????? Sell ??????. ??? True ?? ?????????.
extern bool OneOrderInBarMode = TRUE; //--- ??? True ???????? ????? ????????? ?????? 1 ????? ? 1 ?????. (? ?????? ?????? ?? ????? ??? 1 ??? ? 15 ?????). ? ??????? ?? ????????, ??? ??? ????????? ??? ? 10 ???.
extern int MagicNumber = 777;
extern double MaxSpread = 4;
extern double OpenSlippage = 3; //--- ??????????????? ??? ???????? ??????
extern double CloseSlippage = 5; //--- ??????????????? ??? ???????? ??????
extern int RequoteAttempts = 5; //--- ???????????? ????? ?????????? ??? ????????/???????? ?????? ??? ???????? ? ?????? ???????
extern bool WriteLog = TRUE; //--- //--- ????????? ??????????? ???? ? ?????????.
extern bool WriteDebugLog = TRUE; //--- ????????? ??????????? ???? ?? ??????? ? ?????????.
extern bool PrintLogOnChart = TRUE; //--- ????????? ???????????? ?? ??????? (??? ???????????? ??????????? ?????????????)

double pp;
int pd;
double cf;
string EASymbol; //--- ??????? ??????
int SP;
int CloseSP;
int MaximumTrades = 1;
double NDMaxSpread; //--- ???????????? ????? ????? ???????
bool CheckSpreadRuleBuy; //--- ??????? ??? ???????? ?????? ????? ????????? (????????????? ???????????? ????????? ? ??????????? ??????)
bool CheckSpreadRuleSell;
string OpenOrderComment = "WSFR v3.8.5 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() {
      // код доступен только после оплаты
   }

int 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 (0);

}

int 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 (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 ????? ????????? ?????, ????? ????? ?????? ??????????.");
         }

         CheckSpreadRuleBuy = TRUE;

      } else {

         CheckSpreadRuleBuy = FALSE;

         if (CheckVolatility()) 
         {
            Print("????????????? ?????????, ??? ???????????? ?????????? ???????? ??????");
         }else
         { 
           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 ????? ????????? ?????, ????? ????? ?????? ??????????.");
         }

         CheckSpreadRuleSell = TRUE;

      } else {

         CheckSpreadRuleSell = FALSE;

         if (CheckVolatility()) 
         {
            Print("????????????? ?????????, ??? ???????????? ?????????? ???????? ??????");
         }else
         { 
           OpenPosition(OP_SELL);
         }
      }
   } //--- ????????  if (OpenShortSignal()
}

bool CheckVolatility() {
   double HeightFilter_a = NormalizeDouble(VolaFilter * pp, pd);
   bool restrict = false;
   if (NormalizeDouble(iHigh(NULL, PERIOD_M15, 1) - iLow(NULL, PERIOD_M15, 1), pd) > HeightFilter_a) restrict = true;
   if (NormalizeDouble(iHigh(NULL, PERIOD_M15, 2) - iLow(NULL, PERIOD_M15, 2), pd) > HeightFilter_a) restrict = true;
   return (restrict);
}

int 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)
      {
      OrderModify(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)
               {
               OrderModify(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)
               {
               OrderModify(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(-1);

}

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) {
         if (OrderMagicNumber() == MagicNumber && OrderSymbol() == EASymbol) {
            if (Bid - OrderOpenPrice() > SecureProfitTriger * pp && MathAbs(OrderOpenPrice() + SecureProfit * pp - OrderStopLoss()) >= Point && OrderOpenPrice()<OrderStopLoss()) {

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

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

               ModifyOrder(EASymbol, OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() - SecureProfit * pp, Digits), OrderTakeProfit(), Red);
               }
            }
         } //--- ???????? if (OrderType() == OP_SELL)
      }
   } //--- ???????? for (int i = total - 1; i >= 0; i--)
}

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

   int ModifyTicketID = OrderTicket();

   if (sy=="") sy=Symbol();
   bool   fm; //--- ??????????? ??????
   double pAsk=MarketInfo(sy, MODE_ASK);
   double pBid=MarketInfo(sy, MODE_BID);
   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(OrderTicket(), pp, sl, tp, 0, cl);

         if (!fm) {
         err=GetLastError();

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

         Sleep(1000*PauseAfterError);

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

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--) {
}

int 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 = OrderType();
if (ordtype == OP_BUY) {price = NormalizeDouble(Bid,Digits); CloseColor = CloseBuyColor;}
if (ordtype == OP_SELL) {price = NormalizeDouble(Ask,Digits); CloseColor = CloseSellColor;}

if (MathAbs(OrderTakeProfit() - price) <= MarketInfo(Symbol(),MODE_FREEZELEVEL) * Point) return(0); //--- ???????? ??????? ????????? ????-???????
if (MathAbs(OrderStopLoss() - price) <= MarketInfo(Symbol(),MODE_FREEZELEVEL) * Point) return(0); //--- ???????? ??????? ????????? ????-?????

if (OrderClose(ticket,OrderLots(),price,CloseSlippage,CloseColor)) return(1); //--- ???? ????? ?????? ???????, ?? ?????????? 1)
if ((GetLastError() != 135) && (GetLastError() != 138) && (GetLastError() != 146)) return(0); //--- ???? ??? ?? 0

Print("Requote");

for (int attempt = 1; attempt <= maxtry; attempt++)
   {
   RefreshRates();
   if (ordtype == OP_BUY)
      {
      slippage = MathRound((Bid - p) / pp);
      if (Bid >= p)
         {
         Print("Closing order. Attempt " + (attempt + 1));
         if (OrderClose(ticket,OrderLots(),NormalizeDouble(Bid,Digits),slippage,CloseColor)) return(1);
         if (!((GetLastError() != 135) && (GetLastError() != 138) && (GetLastError() != 146))) cont

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

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

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

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

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

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

Стоимость полного кода
3 243,50₽ ≈ $39.64