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

WallStreet Forex Robot ver. 3.8.5 FINAL (Pirate Edition)

wall street + ozzy èpa¿¡án ïỬá 2012.mq4
Вы автор или правообладатель?

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

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

О программе

WallStreet Forex Robot — торговый советник для MetaTrader 4, ориентированный на работу с валютными парами в таймфрейме M15. Советник анализирует ценовые данные с помощью набора технических индикаторов и на основе полученных сигналов открывает длинные и короткие позиции. Логика включает проверку волатильности, фильтрацию по спреду и управление ордерами.

Продукт поддерживает несколько режимов управления объёмами: фиксированный лот, автоматическое управление капиталом (AutoMM) и режим восстановления с анализом истории сделок. Есть возможность модификации открытых ордеров, закрытия позиций по различным условиям, а также контроль хеджевых позиций. Советник предоставляет настройки ограничения спреда, количества попыток реквотирования и ведения журналов.

Советник работает на платформе MetaTrader 4, использует стандартные торговые API платформы для открытия, модификации и закрытия позиций. Встроена диагностика ошибок и вывод информации на график.

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

НастройкаОписание
Name Name — Название советника.
Copy Copy — Текстовый параметр, содержащий информацию об авторских правах.
Op2 Op2 — Текстовый параметр с дополнительным описанием операции.
Symbol_Op Symbol_Op — Символ и таймфрейм торговли (например, EURUSD m15).
Op Op — Текстовый параметр с описанием операции.
?????? ????? ??? ????, ????? ?????? ?? ????? ???? ??????????? (???? ?????????? ???????) (Date) Date — Дата оптимизации, используется для отображения информации на графике.
_TP _TP — Текстовый параметр с описанием настроек тейк-профита.
(10 2 60) (TakeProfit) TakeProfit — Тейк-профит в пунктах для открытых позиций.
(100 10 200) (StopLoss) StopLoss — Стоп-лосс в пунктах для открытых позиций.
????????? ???????? ???????. ???? ?????????, ?? ???????? ?????? ??????????? ????? ? ?????. (UseStopLevels) UseStopLevels — Использование уровней стоп-лосс и тейк-профит при открытии и модификации ордеров.
????????? ????????? ?????????? ???????? ??????? (??????? ?????????, ????? ????????????) (IsMarketExecution) IsMarketExecution — Переключатель режима исполнения ордеров (Market Execution или обычный режим с указанием SL/TP при отправке).
(0 1 5) ????? ? ????????? (SecureProfit) SecureProfit — Количество пунктов для фиксации прибыли при модификации ордера.
(10 2 30) (SecureProfitTriger) SecureProfitTriger — Триггер в пунктах для начала модификации ордера в сторону фиксации прибыли.
(-200 5 -20) ???????????? ???????? ??? ???????? ??????? Buy ? Sell ??? ????????? ??????? (??? ?????? (MaxLossPoints) MaxLossPoints — Максимальный убыток в пунктах для закрытия убыточной позиции Buy или Sell.
_MM _MM — Текстовый параметр с описанием настроек управления капиталом.
????????? ?????? ?????????????? ???????? (?????????? ???? ???? ???????? ????-????) (RecoveryMode) RecoveryMode — Включение режима восстановления с автоматическим пересчётом лота на основе истории сделок.
????????????? ????? ???? (FixedLot) FixedLot — Фиксированный размер лота при отключённом AutoMM.
?? ?????????? ???? AutoMM > 0. ??????? ?????. ??? RecoveryMode = FALSE, ?????? ????? ?????? ??? ???? (AutoMM) AutoMM — Автоматическое управление размером лота. При AutoMM > 0 рассчитывается лот на основе свободных средств. При RecoveryMode = FALSE используется фиксированный расчёт.
???????????? ???? (AutoMM_Max) AutoMM_Max — Максимальное значение AutoMM для ограничения размера лота.
????? ???????? ????? ??????? ??? ???????(???????????? ??? RecoveryMode = True) (MaxAnalizCount) MaxAnalizCount — Количество исторических ордеров для анализа в режиме RecoveryMode.
???? ?? ???????? (???????????? ??? RecoveryMode = True) (Risk) Risk — Процент риска, используемый в режиме RecoveryMode.
??????????? ????????? ???? (???????????? ??? RecoveryMode = True) (MultiLotPercent) MultiLotPercent — Процент множителя лота, используемый в режиме RecoveryMode.
_Vola _Vola — Текстовый параметр с описанием настроек волатильности.
(15 1 30) (VolaFilter) VolaFilter — Фильтр волатильности — пороговое значение разницы между максимумом и минимумом свечи для ограничения торговли.
_Periods _Periods — Текстовый параметр с описанием периодов.
(60 5 100) (iMA_Period) iMA_Period — Период индикатора скользящей средней (MA).
(10 2 30) (iCCI_Period) iCCI_Period — Период индикатора CCI для анализа.
(10 2 30) (!) ????? ?? ?????? (iATR_Period) iATR_Period — Период индикатора ATR для анализа волатильности.
(10 1 20) (iWPR_Period) iWPR_Period — Период индикатора WPR.
_Add_Op _Add_Op — Текстовый параметр для дополнительных настроек операций.
_AddOpenFilters _AddOpenFilters — Текстовый параметр для дополнительных фильтров открытия.
(0 1 10) ???????? ?? ???? ?? ATR ??? Buy ? Sell (if (iATR_Signal <= FilterATR * pp) return (0);) (!) (FilterATR) FilterATR — Фильтр ATR для фильтрации сигналов открытия позиций Buy и Sell.
(100 10 400) ?????? ?? iCCI ??? Buy ? Sell. ??? ??????????? ??? JPY ???????????? ?????? ?? ??????? ( (iCCI_OpenFilter) iCCI_OpenFilter — Пороговое значение iCCI для фильтрации сигналов открытия позиций Buy и Sell.
_OpenOrderFilters _OpenOrderFilters — Текстовый параметр для дополнительных фильтров открытия ордеров.
(4 2 20) ?????? ?? ??? ???????? Buy ? Sell (?????) (iMA_Filter_Open_a) iMA_Filter_Open_a — Первый пороговый параметр фильтра скользящей средней для сигналов открытия Buy и Sell.
(14 2 50) ?????? ?? ??? ???????? Buy ? Sell (?????) (iMA_Filter_Open_b) iMA_Filter_Open_b — Второй пороговый параметр фильтра скользящей средней для сигналов открытия Buy и Sell.
(-100 1 0) ?????? WPR ??? ???????? Buy ? Sell (iWPR_Filter_Open_a) iWPR_Filter_Open_a — Первый пороговый параметр WPR для фильтрации сигналов открытия Buy.
(-100 1 0) ?????? WPR ??? ???????? Buy ? Sell (iWPR_Filter_Open_b) iWPR_Filter_Open_b — Второй пороговый параметр WPR для фильтрации сигналов открытия Buy.
_CloseOrderFilters _CloseOrderFilters — Текстовый параметр для дополнительных фильтров закрытия ордеров.
(10 2 20) ?????? ???? ???????? ??? ???????? Buy ? Sell (?????) (Price_Filter_Close) Price_Filter_Close — Ценовой фильтр для закрытия позиций Buy и Sell.
(0 1 -100) ?????? WPR ??? ???????? Buy ? Sell (iWPR_Filter_Close) iWPR_Filter_Close — Пороговое значение WPR для фильтрации сигналов закрытия позиций.
_Add _Add — Текстовый параметр с дополнительным описанием.
??????????? ??????? ??????? (LongTrade) LongTrade — Разрешает открытие длинных позиций (Buy).
??????????? ???????? ??????? (ShortTrade) ShortTrade — Разрешает открытие коротких позиций (Sell).
????????????? ???????? ?????? Buy ? ?????? Sell ??????. ??? True ?? ?????????. (No_Hedge_Trades) No_Hedge_Trades — Запрет хеджевых сделок. При True запрещает одновременное наличие позиций Buy и Sell.
??? True ???????? ????? ????????? ?????? 1 ????? ? 1 ?????. (? ?????? ?????? ?? ????? ??? 1 ??? ? 15 (OneOrderInBarMode) OneOrderInBarMode — Ограничение на открытие одного ордера в свече. При True разрешает только один ордер типа Buy или Sell в пределах одной свечи.
MagicNumber MagicNumber — Магический номер для идентификации ордеров советника.
MaxSpread MaxSpread — Максимально допустимый спред для открытия позиций.
??????????????? ??? ???????? ?????? (OpenSlippage) OpenSlippage — Допустимое проскальзывание при открытии позиций.
??????????????? ??? ???????? ?????? (CloseSlippage) CloseSlippage — Допустимое проскальзывание при закрытии позиций.
???????????? ????? ?????????? ??? ????????/???????? ?????? ??? ???????? ? ?????? ??????? (RequoteAttempts) RequoteAttempts — Количество попыток реквотирования при повторном открытии или закрытии ордера.
//--- ????????? ??????????? ???? ? ?????????. (WriteLog) WriteLog — Запись информационного журнала в лог-файл.
????????? ??????????? ???? ?? ??????? ? ?????????. (WriteDebugLog) WriteDebugLog — Запись отладочного журнала в лог-файл.
????????? ???????????? ?? ??????? (??? ???????????? ??????????? ?????????????) (PrintLogOnChart) 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) && (GetLa

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

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

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

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

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

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

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