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

Ben's Stochastic EMA Auto Trading Robot

ben's stochastic ema auto trading robot.mq4

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

#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 2 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 2 общих теговgeniusv101-ecn.mq4MQL4 / MetaTrader 4 · 2 общих теговmarket crusher ea guidlines.txtMQL · 2 общих тегов2 to 1 strategy with signals.pineTradingView · 2 общих теговfresh algo signals & overlays v25_6334471093901859175.pineTradingView · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

Ben's Stochastic EMA Auto Trading Robot — торговый советник для MetaTrader 4, использующий стохастический индикатор и средние скользящие AllAverages для определения тренда и поиска торговых возможностей. Советник открывает сделки на покупку или продажу при пересечении стохастиком уровней перекупленности/перепроданности в направлении тренда. Включает множество фильтров: проверку спреда, торговых часов, маржинальных требований и баланса валютных пар.

Советник поддерживает различные типы управления позициями: фиксацию безубыточности (Break Even), скользящий стоп-лосс (Trailing Stop), прыжущий стоп-лосс (Jumping Stop) и стоп-лосс по свечам (Candlestick Trailing Stop). Также реализована скрытая система стоп-лосса и тейк-профита с отображением линий на графике.

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

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

НастройкаОписание
gen Заголовок группы общих настроек.
Lot Размер лота для каждой сделки.
StopTrading Переключатель, полностью запрещающий советнику открывать новые сделки.
TradeLong Разрешает открытие длинных позиций (покупка).
TradeShort Разрешает открытие коротких позиций (продажа).
TakeProfit Уровень тейк-профита в пунктах.
StopLoss Уровень стоп-лосса в пунктах.
MagicNumber Магический номер для идентификации ордеров, управляемых советником.
TradeComment Комментарий, добавляемый к каждой сделке.
CriminalIsECN Переключатель режима ECN для корректной отправки ордеров через модификацию.
MaxSpread Максимально допустимый спред в пунктах для разрешения торговли.
sto Заголовок группы настроек стохастика.
StochOverSold Уровень перепроданности стохастического индикатора (по умолчанию 20).
StochOverBought Уровень перекупленности стохастического индикатора (по умолчанию 80).
StochCloseBuffer Буфер закрытия стохастика (параметр, объявленный в настройках).
K Период K (быстрая линия) стохастического индикатора.
D Период D (медленная линия) стохастического индикатора.
Slowing Замедление (сглаживание) стохастического индикатора.
PriceField Поле цены для стохастического индикатора (0=Low/High, 1=Close/Close).
mam Заголовок группы настроек метода скользящей средней.
MaMethod Метод расчёта стохастического индикатора (тип скользящей для сигнальной линии).
Mode Режим стохастика (0=Main, 1=Signal) — определяет, какой буфер используется для чтения.
aal Заголовок группы настроек всех средних скользящих.
UseAA Включает или отключает использование индикатора AllAverages для определения тренда.
TimeFrame Таймфрейм для расчёта средних скользящих AllAverages (0=текущий).
Price Тип цены для расчёта средних скользящих AllAverages (0=Low/High, 1=Close/Close).
MA_Period Период расчёта скользящей средней AllAverages.
MA_Shift Сдвиг скользящей средней AllAverages.
MA_Method Метод расчёта скользящей средней (0=Simple, 1=Exponential, 3=Smoothed, 4=Linear).
CandleShift Сдвиг свечи для чтения значений средних скользящих AllAverages.
hts Заголовок группы настроек скрытого стоп-лосса и тейк-профита.
HiddenPips Скрытые пункты, добавляемые к стоп-лоссу и тейк-профиту для расчёта скрытых линий закрытия.
bf Заголовок группы настроек торговых фильтров баланса.
UseZeljko Включает фильтр сбалансированной торговли (Balanced Pair) от Zeljko.
OnlyTradeCurrencyTwice Включает ограничение: каждая валюта может быть задействована максимум в двух открытых позициях.
amc Заголовок группы настроек проверки доступной маржи.
sco Заголовок фильтра Scoobs.
UseScoobsMarginCheck Включает проверку маржи по методу Scoobs (запрет торговли при недостатке маржи).
fk Заголовок фильтра ForexKiwi.
UseForexKiwi Включает фильтр минимального процента маржи ForexKiwi.
FkMinimumMarginPercent Минимальный процент маржи для фильтра ForexKiwi (торговля разрешена, если маржа выше этого значения).
tt Заголовок группы настроек торговых часов.
Trade_Hours Заголовок группы настроек торговых часов.
Trade_Hoursi Заголовок режима 24-часового торгового таймера.
Trade_Hours_M Заголовок утренних торговых часов.
start_hourm Начальный час утренних торговых сессий (24-часовой формат).
end_hourm Конечный час утренних торговых сессий (24-часовой формат).
Trade_Hours_E Заголовок вечерних торговых часов.
start_houre Начальный час вечерних торговых сессий (24-часовой формат).
end_houre Конечный час вечерних торговых сессий (24-часовой формат).
spt Заголовок группы настроек конкретного времени.
StartTime Конкретное время для запуска торговли (параметр специфического таймера).
pts Заголовок группы настроек фильтра свопа.
CadPairsPositiveOnly Разрешает торговать парами с CAD только при положительном свопе (только для фильтра свопа).
AudPairsPositiveOnly Разрешает торговать парами с AUD только при положительном свопе (только для фильтра свопа).
NzdPairsPositiveOnly Разрешает торговать парами с NZD только при положительном свопе (только для фильтра свопа).
tmm Заголовок группы настроек управления торговлей.
BE Заголовок группы настроек безубыточности.
BreakEven Включает или отключает функцию фиксации безубыточности (перемещение стоп-лосса на уровень открытия позиции).
BreakEvenPips Количество пунктов, на которых активируется фиксация безубыточности.
BreakEvenProfit Количество пунктов прибыли, на которых фиксируется безубыточность после активации.
cts Заголовок группы настроек свечного скользящего стоп-лосса.
UseCandlestickTrailingStop Включает стоп-лосс, привязанный к экстремумам предыдущей свечи.
JSL Заголовок группы настроек прыжущего стоп-лосса.
JumpingStop Включает или отключает прыжущий стоп-лосс (поэтапное перемещение стопа при достижении прибыли).
JumpingStopPips Количество пунктов, на которые перемещается стоп-лосс при каждом срабатывании прыжущего стопа.
TSL Заголовок группы настроек скользящего стоп-лосса.
TrailingStop Включает или отключает скользящий стоп-лосс (Trailing Stop).
TrailingStopPips Количество пунктов для отступа скользящего стоп-лосса от текущей цены.
mis Заголовок группы прочих настроек.
ShowManagementAlerts Включает или отключает отображение информационных сообщений на графике.
DisplayGapSize Количество пробелов в информационном выводе на графике.
Получить полный код

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

#include <WinUser32.mqh>
#include <stdlib.mqh>
#define  NL    "\n"
#define  up "Up"
#define  down "Down"
#define  none "None"
#define  both "Both"

#define  TpPrefix "Tp"
#define  SlPrefix "Sl"

/*

Matt Kennel has provided the code for bool O_R_CheckForHistory(int ticket). Cheers Matt, You are a star.

Code for adding debugging Sleep
Alert("G");
int x = 0;
while (x == 0) Sleep(100);

Code for returning a value as pips. The example returns the range of the previous candle
   int PipDivisor = 1;
   if (Digits == 3 || Digits == 5) PipDivisor = 10;
   double CandleRange = ((High[1] - Low[1]) / Point) / PipDivisor;

Standard order loop code
   for (int cc = OrdersTotal() - 1; cc >= 0; cc--)
   {
      if (!OrderSelect(cc, SELECT_BY_POS) ) continue;
      if (OrderSymbol() != Symbol() ) continue;
      if (OrderMagicNumber() != MagicNumber) continue;

   }//for (int cc = OrdersTotal() - 1; cc >= 0; cc--)

FUNCTIONS LIST
int init()
int start()

----Trading----

void LookForTradingOpportunities()
bool IsTradingAllowed()
bool SendSingleTrade(int type, string comment, double lotsize, double price, double stop, double take)
   void ModifyOrder(int ticket, double stop, double take)
bool DoesTradeExist()
void CountOpenTrades()
bool CloseTrade(int ticket)
void LookForTradeClosure()
bool CheckTradingTimes()
void CloseAllTrades()

----Hidden sl/tp---- Doubles up for pending trades-based ea's
void DrawPendingPriceLines()
void DeletePendingPriceLines()
void ReplaceMissingSlTpLines()

----Balance/swap filters module----
void TradeDirectionBySwap()
bool IsThisPairTradable()
bool BalancedPair(int type)

----Matt's Order Reliable library code
bool O_R_CheckForHistory(int ticket) Cheers Matt, You are a star.
void O_R_Sleep(double mean_time, double max_time)

----Indicator readings----
void ReadIndicatorValues()
double GetAa(int tf, int price, int period, int mashift, int method, int buffer, int shift)
double GetStochastic(int shift)

----Trade management module----
void TradeManagementModule()
void BreakEvenStopLoss()
void JumpingStopLoss() 
void HiddenTakeProfit()
void HiddenStopLoss()
void TrailingStopLoss()

*/

extern string  gen="----General inputs----";
extern double  Lot=0.01;
extern bool    StopTrading=false;
extern bool    TradeLong=true;
extern bool    TradeShort=true;
extern int     TakeProfit=20;
extern int     StopLoss=40;
extern int     MagicNumber=0;
extern string  TradeComment="";
extern bool    CriminalIsECN=false;
extern double  MaxSpread=120;

extern string  sto="----Stochastic----";
extern int     StochOverSold=20;
extern int     StochOverBought=80;
extern int     StochCloseBuffer=5;
extern int     K = 14;
extern int     D = 5;
extern int     Slowing=2;
extern string  pf="0=Low/High; 1=Close/Close";
extern int     PriceField=0;
extern string  mam="0=Simple: 1=Exp: 3=Smooth{ 4=Linear";
extern int     MaMethod=0;
extern string  mode="0=Main; 1=Signal";
extern int     Mode=0;

extern string  aal="----All averages inputs----";
extern bool    UseAA=true;
extern int     TimeFrame    =  0;
extern int     Price        =  0;
extern int     MA_Period    = 50;
extern int     MA_Shift     =  0;
extern int     MA_Method    =  1;
extern int     CandleShift  =  0;

extern string  hts="----Stealth stop loss and take profit inputs----";
extern int     HiddenPips=0;//Added to the 'hard' sl and tp and used for closure calculations

extern string  bf="----Trading balance filters----";
extern bool    UseZeljko=true;
extern bool    OnlyTradeCurrencyTwice=true;

extern string  amc="----Available Margin checks----";
extern string  sco="Scoobs";
extern bool    UseScoobsMarginCheck=false;
extern string  fk="ForexKiwi";
extern bool    UseForexKiwi=true;
extern int     FkMinimumMarginPercent=1500;

extern string  tt="----Trading hours----";
extern string  Trade_Hours= "Set Morning & Evening Hours";
extern string  Trade_Hoursi= "Use 24 hour, local time clock";
extern string  Trade_Hours_M= "Morning Hours 0-12";
extern  int    start_hourm = 0;
extern  int    end_hourm = 12;
extern string  Trade_Hours_E= "Evening Hours 12-24";
extern  int    start_houre = 12;
extern  int    end_houre = 24;
extern string  spt="----Specific time inputs----";
extern double  StartTime=12.15;

extern string  pts="----Swap filter----";
extern bool    CadPairsPositiveOnly=true;
extern bool    AudPairsPositiveOnly=true;
extern bool    NzdPairsPositiveOnly=true;

extern string  tmm="----Trade management module----";

extern string  BE="Break even settings";
extern bool    BreakEven=false;
extern int     BreakEvenPips=10;
extern int     BreakEvenProfit=5;
extern string  cts="----Candlestick trailing stop----";
extern bool    UseCandlestickTrailingStop=false;
extern string  JSL="Jumping stop loss settings";
extern bool    JumpingStop=false;
extern int     JumpingStopPips=10;
extern string  TSL="Trailing stop loss settings";
extern bool    TrailingStop=false;
extern int     TrailingStopPips=20;
extern string  mis="----Odds and ends----";
extern bool    ShowManagementAlerts=true;
extern int     DisplayGapSize=30;

int 	         O_R_Setting_max_retries 	= 10;
double 	      O_R_Setting_sleep_time 		= 4.0; /* seconds */
double 	      O_R_Setting_sleep_max 		= 15.0; /* seconds */

int            TicketNo, OpenTrades;
bool           CanTradeThisPair;//Will be false when this pair fails the currency can only trade twice filter, or the balanced trade filter
bool           BuyOpen, SellOpen;
int            RetryCount = 10;//Will make this number of attempts to get around the trade context busy error.

double         AaVal, AaUp, AaDown;//Buffers 0 (val) 1 (up) and 3 (down)
string         trend;

double         StochVal, PrevStochVal;

bool           PendingBuy, PendingSell;
double         PendingPrice, PendingStop, PendingTake;
datetime       PendingTime;
double         PendingCandleRange;
double         PendingRecreationCancelPips = 2;

double         HiddenStopLoss, HiddenTakeProfit;

bool           EnoughMargin;
string         MarginMessage;

string         Gap, ScreenMessage;
int            OldBars;
int            OldCstBars;//For candlestick ts
string         PipDescription=" pips";
bool           ForceTradeClosure;

void DisplayUserFeedback()
{

   if (IsTesting() && !IsVisualMode()) return;

   ScreenMessage = "";
   ScreenMessage = StringConcatenate(ScreenMessage,Gap, NL);
   ScreenMessage = StringConcatenate(ScreenMessage, Gap, TimeToStr(TimeLocal(), TIME_DATE|TIME_MINUTES|TIME_SECONDS), NL );
   /*

   double i;
   int m,s,k;
   m=Time[0]+Period()*60-CurTime();
   i=m/60.0;
   s=m%60;
   m=(m-m%60)/60;
   ScreenMessage = StringConcatenate(ScreenMessage,Gap, m + " minutes " + s + " seconds left to bar end", NL);
   */

   ScreenMessage = StringConcatenate(ScreenMessage,Gap, NL);      
   ScreenMessage = StringConcatenate(ScreenMessage,Gap, "Lot size: ", Lot, " (Criminal's minimum lot size: ", MarketInfo(Symbol(), MODE_MINLOT), ")", NL);
   ScreenMessage = StringConcatenate(ScreenMessage,Gap, "Take profit: ", TakeProfit, PipDescription,  NL);
   ScreenMessage = StringConcatenate(ScreenMessage,Gap, "Stop loss: ", StopLoss, PipDescription,  NL);
   ScreenMessage = StringConcatenate(ScreenMessage,Gap, "Magic number: ", MagicNumber, NL);
   ScreenMessage = StringConcatenate(ScreenMessage,Gap, "Trade comment: ", TradeComment, NL);
   if (CriminalIsECN) ScreenMessage = StringConcatenate(ScreenMessage,Gap, "CriminalIsECN = true", NL);
   else ScreenMessage = StringConcatenate(ScreenMessage,Gap, "CriminalIsECN = false", NL);
   ScreenMessage = StringConcatenate(ScreenMessage,Gap, "MaxSpread = ", MaxSpread, ": Spread = ", MarketInfo(Symbol(), MODE_SPREAD), NL, NL );

   ScreenMessage = StringConcatenate(ScreenMessage,Gap, "Trading hours", NL);
   if (start_hourm == 0 && end_hourm == 12 && start_houre && end_houre == 24) ScreenMessage = StringConcatenate(ScreenMessage,Gap, "            24H trading", NL);
   else
   {
      ScreenMessage = StringConcatenate(ScreenMessage,Gap, "            start_hourm: ", DoubleToStr(start_hourm, 2), 
                      ": end_hourm: ", DoubleToStr(end_hourm, 2), NL);
      ScreenMessage = StringConcatenate(ScreenMessage,Gap, "            start_houre: ", DoubleToStr(start_houre, 2), 
                      ": end_houre: ", DoubleToStr(end_houre, 2), NL);

   }//else

   ScreenMessage = StringConcatenate(ScreenMessage,Gap, NL);
   ScreenMessage = StringConcatenate(ScreenMessage,Gap, "AA value ", AaVal, ": Trend is ", trend, NL);
   ScreenMessage = StringConcatenate(ScreenMessage,Gap, "Current Stochastic: ", StochVal, NL);
   ScreenMessage = StringConcatenate(ScreenMessage,Gap, "Previous Stochastic: ", PrevStochVal, NL);

   ScreenMessage = StringConcatenate(ScreenMessage,Gap, NL);

   if (BreakEven)
   {
      ScreenMessage = StringConcatenate(ScreenMessage,Gap, "Breakeven is set to ", BreakEvenPips, PipDescription);
      ScreenMessage = StringConcatenate(ScreenMessage,": BreakEvenProfit = ", BreakEvenProfit, PipDescription);
      ScreenMessage = StringConcatenate(ScreenMessage,Gap, NL); 
   }//if (BreakEven)

   if (UseCandlestickTrailingStop)
   {
      ScreenMessage = StringConcatenate(ScreenMessage,Gap, "Using candlestick trailing stop", NL);      
   }//if (UseCandlestickTrailingStop)

   if (JumpingStop)
   {
      ScreenMessage = StringConcatenate(ScreenMessage,Gap, "Jumping stop is set to ", JumpingStopPips, PipDescription);
      ScreenMessage = StringConcatenate(ScreenMessage,Gap, NL);   
   }//if (JumpingStop)

   if (TrailingStop)
   {
      ScreenMessage = StringConcatenate(ScreenMessage,Gap, "Trailing stop is set to ", TrailingStopPips, PipDescription);
      ScreenMessage = StringConcatenate(ScreenMessage,Gap, NL);   
   }//if (TrailingStop)

   if (MarginMessage != "") ScreenMessage = StringConcatenate(ScreenMessage,NL, Gap, MarginMessage, NL);

   Comment(ScreenMessage);

}//void DisplayUserFeedback()

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

int deinit()
{

   Comment("");

   return(0);
}

void BreakEvenStopLoss() // Move stop loss to breakeven
{

   double NewStop;
   bool result;
   string LineName = SlPrefix + DoubleToStr(OrderTicket(), 0);
   double sl = ObjectGet(LineName, OBJPROP_PRICE1);

   if (OrderType()==OP_BUY)
   {
      if (sl >= OrderOpenPrice() ) return;
      if (Bid >= OrderOpenPrice () + (Point*BreakEvenPips))          
      {

         NewStop = NormalizeDouble(OrderOpenPrice()+(BreakEvenProfit*Point), Digits);
         if (ObjectFind(LineName) == -1)
         {
            ObjectCreate(LineName, OBJ_HLINE, 0, TimeCurrent(), 0);
            ObjectSet(LineName, OBJPROP_COLOR, Red);
            ObjectSet(LineName, OBJPROP_WIDTH, 1);
            ObjectSet(LineName, OBJPROP_STYLE, STYLE_DOT);
         }//if (ObjectFind(LineName == -1) )

         ObjectMove(LineName, 0, TimeCurrent(), NewStop);         
      }//if (Bid >= OrderOpenPrice () + (Point*BreakEvenPips) && 
   }//if (OrderType()==OP_BUY)               			         

   if (OrderType()==OP_SELL)
   {
     if (sl <= OrderOpenPrice() && sl > 0) return;
     if (Ask <= OrderOpenPrice() - (Point*BreakEvenPips)) 
     {

         NewStop = NormalizeDouble(OrderOpenPrice()-(BreakEvenProfit*Point), Digits);
         if (ObjectFind(LineName) == -1)
         {
            ObjectCreate(LineName, OBJ_HLINE, 0, TimeCurrent(), 0);
            ObjectSet(LineName, OBJPROP_COLOR, Red);
            ObjectSet(LineName, OBJPROP_WIDTH, 1);
            ObjectSet(LineName, OBJPROP_STYLE, STYLE_DOT);
         }//if (ObjectFind(LineName == -1) )

         ObjectMove(LineName, 0, Time[0], NewStop);
     }//if (Ask <= OrderOpenPrice() - (Point*BreakEvenPips) && (OrderStopLoss()>OrderOpenPrice()|| OrderStopLoss()==0))     
   }//if (OrderType()==OP_SELL)

} // End BreakevenStopLoss sub

void JumpingStopLoss() 
{

   if (OrderProfit() < 0) return;//Nothing to do
   string LineName = SlPrefix + DoubleToStr(OrderTicket(), 0);
   double sl = ObjectGet(LineName, OBJPROP_PRICE1);
   if (sl == 0) return;//No line, so nothing to do
   double NewStop;

   if (OrderType()==OP_BUY)
   {
      if (sl < OrderOpenPrice() ) return;//Not at breakeven yet

      if (Bid>= sl + ((JumpingStopPips*2)*Point) )
      {
         NewStop = NormalizeDouble(sl + (JumpingStopPips * Point), Digits);
         ObjectMove(LineName, 0, Time[0], NewStop);
      }// if (Bid>= sl + (JumpingStopPips*Point) && sl>= OrderOpenPrice())      
   }//if (OrderType()==OP_BUY)

   if (OrderType()==OP_SELL)
   {
      if (sl > OrderOpenPrice() ) return;//Not at breakeven yet

      if (Bid<= sl - ((JumpingStopPips*2)*Point))
      {
         NewStop = NormalizeDouble(sl - (JumpingStopPips * Point), Digits);
         ObjectMove(LineName, 0, Time[0], NewStop);
      }// close if (Bid>= sl + (JumpingStopPips*Point) && sl>= OrderOpenPrice())         
   }//if (OrderType()==OP_SELL)

} //End of JumpingStopLoss sub

void TrailingStopLoss()
{

   if (OrderProfit() < 0) return;//Nothing to do
   string LineName = SlPrefix + DoubleToStr(OrderTicket(), 0);
   double sl = ObjectGet(LineName, OBJPROP_PRICE1);
   if (sl == 0) return;//No line, so nothing to do
   double NewStop;

   if (OrderType()==OP_BUY)
   {
      if (sl < OrderOpenPrice() ) return;//Not at breakeven yet

      if (Bid>= sl + (TrailingStopPips * Point) )
      {
         NewStop = NormalizeDouble(sl + (TrailingStopPips * Point), Digits);
         ObjectMove(LineName, 0, Time[0], NewStop);
      }// if (Bid>= sl + (JumpingStopPips*Point) && sl>= OrderOpenPrice())      
   }//if (OrderType()==OP_BUY)

   if (OrderType()==OP_SELL)
   {
      if (sl > OrderOpenPrice() ) return;//Not at breakeven yet

      if (Bid<= sl - (TrailingStopPips * Point) )
      {
         NewStop = NormalizeDouble(sl - (TrailingStopPips * Point), Digits);
         ObjectMove(LineName, 0, Time[0], NewStop);
      }// close if (Bid>= sl + (JumpingStopPips*Point) && sl>= OrderOpenPrice())         
   }//if (OrderType()==OP_SELL)

} // End of TrailingStopLoss sub

void CandlestickTrailingStop()
{

   if (OldCstBars == Bars) return;
   OldCstBars = Bars;

   if (OrderProfit() < 0) return;//Nothing to do
   string LineName = SlPrefix + DoubleToStr(OrderTicket(), 0);
   double sl = ObjectGet(LineName, OBJPROP_PRICE1);
   if (sl == 0) return;//No line, so nothing to do
   double NewStop;

   Alert("W");
   if (OrderType() == OP_BUY)
   {
      if (Low[1] > sl)
      {
         NewStop = NormalizeDouble(Low[1], Digits);
         ObjectMove(LineName, 0, Time[0], NewStop);
      }//if (Low[1] > sl)
   }//if (OrderType == OP_BUY)

   if (OrderType() == OP_SELL)
   {
      if (High[1] < sl)
      {
         NewStop = NormalizeDouble(High[1], Digits);
         ObjectMove(LineName, 0, Time[0], NewStop);
      }//if (High[1] < sl)
   }//if (OrderType() == OP_SELL)

}//End void CandlestickTrailingStop()

void TradeManagementModule()
{

   if (UseCandlestickTrailingStop) CandlestickTrailingStop();

   if(BreakEven) BreakEvenStopLoss();

   if(JumpingStop) JumpingStopLoss();

   if(TrailingStop) TrailingStopLoss();

}//void TradeManagementModule()

bool SendSingleTrade(int type, string comment, double lotsize, double price, double stop, double take)
{

   int slippage = 10;
   if (Digits == 3 || Digits == 5) slippage = 100;

   color col = Red;
   if (type == OP_BUY || type == OP_BUYSTOP) col = Green;

   int expiry = 0;

   for (int cc = 0; cc < RetryCount; cc++)
   {
      for (int d = 0; (d < RetryCount) && IsTradeContextBusy(); d++) Sleep(100);

      RefreshRates();
      if (type == OP_BUY) price = NormalizeDouble(Ask, Digits);
      if (type == OP_SELL) price = NormalizeDouble(Bid, Digits);

      if (!CriminalIsECN) int ticket = OrderSend(Symbol(),type, lotsize, price, slippage, stop, take, comment, MagicNumber, expiry, col);

      if (CriminalIsECN)
      {
         ticket = OrderSend(Symbol(),type, lotsize, price, slippage, 0, 0, comment, MagicNumber, expiry, col);
         if (ticket > -1)
         {
	           ModifyOrder(ticket, stop, take);
         }//if (ticket > 0)}
      }//if (CriminalIsECN)

      if (ticket > -1) break;//Exit the trade send loop
      if (cc == RetryCount - 1) return(false);
   }//for (int cc = 0; cc < RetryCount; cc++);

   if (ticket < 0)
   {
      string stype;
      if (type == OP_BUY) stype = "OP_BUY";
      if (type == OP_SELL) stype = "OP_SELL";
      if (type == OP_BUYLIMIT) stype = "OP_BUYLIMIT";
      if (type == OP_SELLLIMIT) stype = "OP_SELLLIMIT";
      if (type == OP_BUYSTOP) stype = "OP_BUYSTOP";
      if (type == OP_SELLSTOP) stype = "OP_SELLSTOP";
      int err=GetLastError();
      Alert(Symbol(), " jor ", stype," order send failed with error(",err,"): ",ErrorDescription(err));
      Print(Symbol(), " jor ", stype," order send failed with error(",err,"): ",ErrorDescription(err));
      return(false);
   }//if (ticket < 0)  

   TicketNo = ticket;

   bool TradeReturnedFromCriminal = false;
   while (!TradeReturnedFromCriminal)
   {
      TradeReturnedFromCriminal = O_R_CheckForHistory(ticket);
      if (!TradeReturnedFromCriminal)
      {
         Alert(Symbol(), " sent trade not in your trade history yet. Turn of this ea NOW.");
      }//if (!TradeReturnedFromCriminal)
   }//while (!TradeReturnedFromCriminal)

   return(true);

}//End bool SendSingleTrade(int type, string comment, double lotsize, double price, double stop, double take)

void ModifyOrder(int ticket, double stop, double take)
{

   if (!OrderSelect(ticket, SELECT_BY_TICKET) ) return;//Trade does not exist, so no mod needed

   for (int cc = 0; cc < RetryCount; cc++)
   {
      for (int d = 0; (d < RetryCount) 

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

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

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

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

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

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

Стоимость полного кода
2 846,70₽ ≈ $35.28