gryps2/EA-code/handy_systems/RELEASE/84001-BLESSING for GBPJPY/BLESSING for GBPJPY.mq4

1701 lines
106 KiB
MQL4
Raw Permalink Normal View History

2025-05-30 14:58:21 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| BLESSING for GBPJPY.mq4 |
//| Copyright <EFBFBD> 2022-2025 HANDY SYSTEMS, All Rights Reserved. |
//| https://handy-systems.com |
//+------------------------------------------------------------------+
#property strict
//PRODUCTION<EFBFBD>0<EFBFBD>0<EFBFBD>0g0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0Bfo00S0S0K0<EFBFBD>0 N<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>00
//#define _DEVELOPMENT
//PRODUCTION<EFBFBD>0<EFBFBD>0<EFBFBD>0g0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0Bfo00S0S0K0<EFBFBD>0
N<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>00
//EA-BANK<EFBFBD>S<EFBFBD>^~<EFBFBD>0k0Y0<EFBFBD>0Bfo00S0S0K0<EFBFBD>0 Nn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>d<EFBFBD>Y0<EFBFBD>00
//#define _EA_BANK
//EA-BANK<EFBFBD>S<EFBFBD>^~<EFBFBD>0k0Y0<EFBFBD>0Bfo00S0S0K0<EFBFBD>0
Nn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>d<EFBFBD>Y0<EFBFBD>00
//GogoJungleb__<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0Y0<EFBFBD>0Bfo00S0S0K0<EFBFBD>0 Nn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>d<EFBFBD>Y0<EFBFBD>00
//#define _GOGOJUNGLE
//GogoJungleb__<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0Y0<EFBFBD>0Bfo00S0S0K0<EFBFBD>0
Nn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>d<EFBFBD>Y0<EFBFBD>00
//MQL5.comb__EAk0Y0<EFBFBD>0Bfo00S0S0K0<EFBFBD>0 Nn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>d<EFBFBD>Y0<EFBFBD>00
//#define _MQL5_COM
//MQL5.comb__EAk0Y0<EFBFBD>0Bfo00S0S0K0<EFBFBD>0
Nn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>d<EFBFBD>Y0<EFBFBD>00
//LET'S REALb__EAk0Y0<EFBFBD>0Bfo00S0S0K0<EFBFBD>0 Nn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>d<EFBFBD>Y0<EFBFBD>00
//#define _LETS_REAL
//LET'S REALb__EAk0Y0<EFBFBD>0Bfo00S0S0K0<EFBFBD>0
Nn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>d<EFBFBD>Y0<EFBFBD>00
#include <stdlib.mqh>
//----------EA-BANK certification begin
#ifdef _EA_BANK
#include <auth.mqh>
#endif // _EA_BANK
//----------EA-BANK certification end
#property copyright "Copyright <00> 2022-2025 HANDY SYSTEMS, All Rights Reserved."
#ifndef _GOGOJUNGLE
//GogoJungleg0o0Y<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0o01<EFBFBD><EFBFBD>SU0<EFBFBD>0f0D0j0D0_0<EFBFBD>00S0S0K0<EFBFBD>0 Nn0L<EFBFBD>o0GogoJungleg0o0!q<EFBFBD><EFBFBD>Y0<EFBFBD>0
#property link "https://www.handy-systems.com/"
//GogoJungleg0o0Y<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0o01<EFBFBD><EFBFBD>SU0<EFBFBD>0f0D0j0D0_0<EFBFBD>00S0S0K0<EFBFBD>0
Nn0L<EFBFBD>o0GogoJungleg0o0!q<EFBFBD><EFBFBD>Y0<EFBFBD>0
#endif // _GOGOJUNGLE
#property icon "HANDY-SYSTEMS-LOGO.ico"
#ifdef _EA_BANK
#property version "1.2" // _EA_BANK
#endif
#ifdef _GOGOJUNGLE
#property version "1.4" // _GOGOJUNGLE
#endif // _GOGOJUNGLE
#ifdef _MQL5_COM
#property version "1.2" // _MQL5_COM
#endif
#ifdef _LETS_REAL
#property version "1.0" // _LETS_REAL
#else
#property version "1.4" // ACCOUNT-FREE
#endif
#ifdef _DEVELOPMENT
#define dinput input
#else
#define dinput
#endif // _DEVELOPMENT_
#ifdef _GOGOJUNGLE
const string STR_EA_ID = "44085";
const string STR_EA_NAME = STR_EA_ID + ":" + "BLESSING_for_GBPJPY";
#else
const string STR_EA_NAME = "BLESSING_for_GBPJPY";
#endif // _GOGOJUNGLE
const string STR_OP_BUY = "BUY";
const string STR_OP_SELL = "SELL";
input int MagicNumber = 84001; // MagicNumber
input double Lots = 0.11; // Lots
input double MaxSpread = 3.0; // MaxSpread (pips)
input double TakeProfit_pips = 890.0; // TakeProfit (pips)
input double StopLoss_pips = 250.0; // StopLoss (pips)
dinput double Rikaku_pips = 350.0;
dinput double Songiri_pips = 225.0;
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
dinput int TrailingStopStartPips = 280;
dinput int TrailingStopPips = 20;
//c$PR<EFBFBD>0 NR0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
dinput int ReLimitActionPips = 35;
dinput int ReLimitPips = 30;
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
int Slippage = 3;
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>Vpe
const int MAX_ORDER_REPEAT = 5;
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>__jBf<EFBFBD><EFBFBD><EFBFBD><EFBFBD>y <EFBFBD>
const int TIME_WAIT_FOR_MARKET_OPEN = 3600;
int xBars = 0, xxBars = 0;
double BuyStop = 0, SellStop = DBL_MAX;
double BuyLimit = DBL_MAX, SellLimit = 0;
//g'Y<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0pe<EFBFBD>00 N<EFBFBD>g0eQ<EFBFBD>Rc<EFBFBD>[W0f0 NU0D00
int maxposition = 1;
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>Y$Pn00k0<z<EFBFBD>PU0[0<EFBFBD>04XTo00truek0W0f0 NU0D00
bool CandleStartStarting = true;
//gi<EFBFBD>S6R<EFBFBD>_<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
#define OPTIMIZE_RF 0x0001 // RF
#define OPTIMIZE_TR 0x0002 // <EFBFBD>S_pe
#define OPTIMIZE_WR 0x0004 // <EFBFBD>R<EFBFBD>s
// gi<EFBFBD>S<EFBFBD>0<EFBFBD>0<EFBFBD>0n0.z^<EFBFBD>
enum OPTYPE
{
OPTYPE_RF_ONLY = OPTIMIZE_RF, // RF
OPTYPE_TR_ONLY = OPTIMIZE_TR, // <EFBFBD>S_pe
OPTYPE_WR_ONLY = OPTIMIZE_WR, // <EFBFBD>R<EFBFBD>s
OPTYPE_RF_TR = OPTIMIZE_RF |
OPTIMIZE_TR, // RF+<EFBFBD>S_pe
OPTYPE_RF_WR = OPTIMIZE_RF |
OPTIMIZE_WR, // RF+<EFBFBD>R<EFBFBD>s
OPTYPE_TR_WR = OPTIMIZE_TR |
OPTIMIZE_WR, // <EFBFBD>S_pe+<EFBFBD>R<EFBFBD>s
OPTYPE_RF_TR_WR = OPTIMIZE_RF |
OPTIMIZE_TR |
OPTIMIZE_WR, // RF+<EFBFBD>S_pe+<EFBFBD>R<EFBFBD>s
OPTYPE_NONE = 0 // j0W0
};
dinput OPTYPE OP_Type = OPTYPE_RF_ONLY; // gi<EFBFBD>S<EFBFBD>0<EFBFBD>0<EFBFBD>0
// <EFBFBD>v4X<EFBFBD>0<EFBFBD>0<EFBFBD>0n0.z^<EFBFBD>
enum MKTTYPE
{
MKTTYPE_NONE = 0x0000, // j0W0
MKTTYPE_TRENDING = 0x0001, // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>v4X
MKTTYPE_RANGE = 0x0002, // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>v4X
MKTTYPE_BOTH = 0x0003 // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0+<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>v4X
};
MKTTYPE MKT_Type = MKTTYPE_NONE; // <EFBFBD>v4X<EFBFBD>0<EFBFBD>0<EFBFBD>0
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0T Ype<EFBFBD>0 N<EFBFBD>k0<EFBFBD><EFBFBD><EFBFBD>0d0Q0~0Y00
dinput int MA_Period1 = 20; // <EFBFBD>wg<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}
dinput int MA_Period2 = 50; // w<EFBFBD>g<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0T Ype<EFBFBD>0 N<EFBFBD>k0<EFBFBD><EFBFBD><EFBFBD>0d0Q0~0Y00
dinput int BB_Period = 20; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD><EFBFBD>{g<EFBFBD><EFBFBD>
dinput double BB_Deviation = 2.5; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0OP<EFBFBD>]
dinput double BB_Width = 0.30; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0E^%
dinput double MA_Deviation = 2.0; // <EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}n0VN<EFBFBD><EFBFBD>%
dinput int ADX_Trend_Period = 10; // ADX<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD>n0<EFBFBD><EFBFBD>{g<EFBFBD><EFBFBD>
dinput double ADX_Trend_Level = 21.5; // ADX<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD>n0<EFBFBD>W<EFBFBD>n<EFBFBD>0<EFBFBD>0<EFBFBD>0
dinput int ADX_Trend_Duration = 25; // ADX<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD>n0<EFBFBD>}<EFBFBD>}g<EFBFBD><EFBFBD>
dinput int ADX_Range_Period = 100; // ADX<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD>n0<EFBFBD><EFBFBD>{g<EFBFBD><EFBFBD>
dinput double ADX_Range_Level = 11.5; // ADX<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD>n0<EFBFBD>W<EFBFBD>n<EFBFBD>0<EFBFBD>0<EFBFBD>0
dinput int ADX_Range_Duration = 20; // ADX<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD>n0<EFBFBD>}<EFBFBD>}g<EFBFBD><EFBFBD>
dinput int ATR_Period_Filter = 26; // ATRn0<EFBFBD><EFBFBD>{g<EFBFBD><EFBFBD>
dinput double ATR_Volatility_Threshold = 1.25; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
Nf$R<EFBFBD>[n0<EFBFBD><EFBFBD>$P
dinput int Loss_Lookback_Count = 3; // d1Y<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0a<EFBFBD><EFBFBD>0,gpe
dinput int Max_Consecutive_Losses = 12; // 1<EFBFBD><EFBFBD>[#<EFBFBD><EFBFBD>} d1Y<EFBFBD>Vpe
dinput double Max_Loss_Pips = 1000.0; // g'Y d1Ypips
dinput double High_Vol_Loss_Limit = 980.0; // ؚ<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bfn0 d1Y6RP<EFBFBD>(pips)
//zln<EFBFBD>0<EFBFBD>0<EFBFBD>0n0T Ype<EFBFBD>0 N<EFBFBD>k0<EFBFBD><EFBFBD><EFBFBD>0d0Q0~0Y00
dinput int BB_TP_Period = 30; // )R<EFBFBD>x<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD><EFBFBD>{g<EFBFBD><EFBFBD>
dinput double BB_TP_Deviation = 4.5; // )R<EFBFBD>x<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0OP<EFBFBD>]
dinput int BB_SL_Period = 750; // dR<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD><EFBFBD>{g<EFBFBD><EFBFBD>
dinput double BB_SL_Deviation = 1.0; // dR<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0OP<EFBFBD>]
dinput double TP_Delta = 0.04; // )R<EFBFBD>x<EFBFBD>O<hn0<EFBFBD>Xnpips
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 Ype
datetime lastEntryRestrictionTime = 0; // g<EFBFBD>_n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>06R<EFBFBD>_Bf;R
int restrictionCount = 0; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>06R<EFBFBD>_<EFBFBD>Vpe
#ifdef _LETS_REAL
// LET'S REALn0<EFBFBD><EFBFBD><<EFBFBD>(u<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>[<EFBFBD>Y0<EFBFBD>0
int lr_product_id=759; // PRODUCT ID
#import "wininet.dll"
int InternetAttemptConnect(int x);
int InternetOpenW(string &sAgent,int lAccessType,string &sProxyName,string &sProxyBypass,int lFlags);
int InternetConnectW(int hInternet,string &szServerName,int nServerPort,string &lpszUsername,string &lpszPassword,int dwService,int dwFlags,int dwContext);
int HttpOpenRequestW(int hConnect,string &Verb,string &ObjectName,string &Version,string &Referer,string &AcceptTypes,uint dwFlags,int dwContext);
int HttpSendRequestW(int hRequest,string &lpszHeaders,int dwHeadersLength,uchar &lpOptional[],int dwOptionalLength);
int HttpQueryInfoW(int hRequest,int dwInfoLevel,int &lpvBuffer[],int &lpdwBufferLength,int &lpdwIndex);
int InternetReadFile(int hFile,uchar &sBuffer[],int lNumBytesToRead,int &lNumberOfBytesRead);
int InternetCloseHandle(int hInet);
#import
#define OPEN_TYPE_PRECONFIG 0
#define FLAG_KEEP_CONNECTION 0x00400000
#define FLAG_PRAGMA_NOCACHE 0x00000100
#define FLAG_RELOAD 0x80000000
#define SERVICE_HTTP 3
#define CloseHandle InternetCloseHandle(lr_session);InternetCloseHandle(lr_connect);InternetCloseHandle(lr_request);InternetCloseHandle(lr_send);
string
lr_is_demo="0",
lr_platform="MT4_EA",
lr_version="1.07",
lr_host="api.lets-real.com",
lr_path="index.php?route=api/register",
lr_vers="HTTP/1.1",
lr_verb="POST",
lr_head="Content-Type: application/x-www-form-urlencoded",
lr_useragent="Mozilla",
lr_result,
lr_nill,
lr_postdata,
lr_ct,
lr_msg,
lr_msg1="Authentication Failed! ",
lr_msg2=" from lets-real.com ";
int lr_port=80,lr_session,lr_connect,lr_readfile,lr_request,lr_send,lr_auth_failure_times;
bool lr_auth_success=false,lr_auth_exec=true;
datetime lr_auth_time;
#endif // _LETS_REAL
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
#ifdef _EA_BANK
//----------EA-BANK certification begin
if(!auth()) {
return -1;
}
//----------EA-BANK certification end
//<EFBFBD><EFBFBD><<EFBFBD>OKn0<EFBFBD>eW[R<EFBFBD>0h<EFBFBD>:yY0<EFBFBD>0
Comment("EA-BANK<00><><<3C><1A>OK");
#endif // _EA_BANK
#ifdef _LETS_REAL
// LET'S REALn0<EFBFBD><EFBFBD><<EFBFBD>(u<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>[<EFBFBD>Y0<EFBFBD>0
lr_is_demo=IsDemo()?"1":"0";
if(IsTesting())
{
lr_auth_exec=false;
lr_auth_success=true;
}
if(lr_auth_exec && !IsDllsAllowed())
{
lr_msg=lr_msg1+"Please allow use of DLL "+lr_msg2;
Alert(lr_msg);
Print(lr_msg);
ExpertRemove();
return(INIT_FAILED);
}
#endif // _LETS_REAL
//O(uW0f0D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0^<EFBFBD>h<EFBFBD>:yk0Y0<EFBFBD>0
HideTestIndicators(true);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
#ifdef _EA_BANK
//----------EA-BANK certification begin
if(!auth()) {
return;
}
//----------EA-BANK certification end
#endif // _EA_BANK
#ifdef _LETS_REAL
// LET'S REALn0<EFBFBD><EFBFBD><<EFBFBD>(u<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>[<EFBFBD>Y0<EFBFBD>0
if(lr_auth_exec && TimeCurrent()>=lr_auth_time)
{
CloseHandle
string lr_p0,lr_p1,lr_p2,lr_p3;
char lr_data[];
lr_p0=IntegerToString(IsTradeAllowed());
lr_p1=AccountCompany();
lr_p2=IntegerToString(AccountNumber());
lr_p3=StringSubstr(WindowExpertName(),StringLen(WindowExpertName())-8,8);
lr_postdata="trade_allowed="+lr_p0+"&fx_company="+lr_p1+"&fx_account="+lr_p2+"&key="+lr_p3+"&ver="+lr_version+"&product_id="+IntegerToString(lr_product_id)+"&platform="+lr_platform+"&is_demo="+lr_is_demo;
StringToCharArray(lr_postdata,lr_data,0,WHOLE_ARRAY,CP_UTF8);
lr_session=InternetOpenW(lr_useragent,OPEN_TYPE_PRECONFIG,lr_nill,lr_nill,0);
lr_connect=InternetConnectW(lr_session,lr_host,lr_port,lr_nill,lr_nill,SERVICE_HTTP,0,0);
lr_request=HttpOpenRequestW(lr_connect,lr_verb,lr_path,lr_vers,lr_nill,lr_nill,FLAG_KEEP_CONNECTION|FLAG_RELOAD|FLAG_PRAGMA_NOCACHE,0);
lr_send=HttpSendRequestW(lr_request,lr_head,StringLen(lr_head),lr_data,ArraySize(lr_data)-1);
if(lr_send<=0)
{
lr_msg=lr_msg1+lr_msg2+"\n"+"Please check your network."+"\n"+
"InternetAttemptConnect="+IntegerToString(InternetAttemptConnect(0))+"\n"+
"session="+IntegerToString(lr_session)+"\n"+
"connect="+IntegerToString(lr_connect)+"\n"+
"request="+IntegerToString(lr_request)+"\n"+
"send="+IntegerToString(lr_send);
Comment(lr_msg);
return;
}
else
{
uchar response[100];
int dwBytes1;
lr_result="";
while(InternetReadFile(lr_request,response,0,dwBytes1))
{
lr_readfile=InternetReadFile(lr_request,response,100,dwBytes1);
if(dwBytes1<=0)
break;
lr_result=lr_result+CharArrayToString(response,0,dwBytes1);
}
string lr_to_split=lr_result;
string lr_sep=",";
string lr_respara[];
ushort lr_u_sep=StringGetCharacter(lr_sep,0);
int k=StringSplit(lr_to_split,lr_u_sep,lr_respara);
if(k>0)
{
for(int j=0; j<k; j++)
{
StringReplace(lr_respara[j],"{","");
StringReplace(lr_respara[j],"}","");
int lr_position=StringFind(lr_respara[j],":",0);
lr_respara[j]=StringSubstr(lr_respara[j],lr_position+1);
}
}
else
{
ArrayResize(lr_respara,1);
lr_respara[0]="false";
}
if(lr_respara[0]!="true")
{
lr_auth_success=false;
lr_auth_failure_times++;
int seconds=lr_auth_failure_times>4?60:5;
lr_auth_time=TimeCurrent()+seconds;
lr_msg=lr_msg1+lr_to_split+lr_msg2;
Comment(lr_msg);
Print(lr_result,lr_msg2);
}
else
{
lr_auth_success=true;
lr_auth_failure_times=0;
lr_auth_time=TimeCurrent()+43200;
Print("Authentication Success "+lr_msg2);
if(StringLen(lr_msg)>0)
Comment("");
}
}
}
if(!lr_auth_success)
return;
#endif // _LETS_REAL
int i;
int ticket;
int CountBuy = 0,CountSell = 0;
double profit;
bool res;
double xpoint = Point;
// \pe<EFBFBD>p<EFBFBD>N Nn0Ahpek0<EFBFBD>_X0f0Pipsn0$P<EFBFBD>0<EFBFBD><EFBFBD>teY0<EFBFBD>0
if (Digits() == 3 || Digits() == 5)
{
xpoint = xpoint * 10;
}
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>Y$Pn00<z<EFBFBD>P<EFBFBD>x<EFBFBD><EFBFBD>b_ <EFBFBD>n04XT0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
if(Bars != xBars || CandleStartStarting == false)
{
xBars = Bars;
//-------- <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 --------
// @b gW0f0D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0
for(i=OrdersTotal()-1; i>=0; i--)
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0x<EFBFBD><EFBFBD>b(<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0uX0_04XT0<EFBFBD>0<EFBFBD>0<EFBFBD>0K0<EFBFBD>0<EFBFBD>bQ0<EFBFBD>QY0)
if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false)
{
Print("OrderSelect returned the error of ", GetLastError() );
break;
}
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0L0N<EFBFBD><EFBFBD>W0j0D04XTo00for<EFBFBD>en0HQ-<EFBFBD>k0;b<EFBFBD>0 <EFBFBD>
if (OrderSymbol() != Symbol()) continue;
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0N<EFBFBD><EFBFBD>W0j0D04XTo00for<EFBFBD>en0HQ-<EFBFBD>k0;b<EFBFBD>0 <EFBFBD>
if (OrderMagicNumber() != MagicNumber) continue;
if (OrderType() == OP_BUY)
{
profit = Bid - OrderOpenPrice(); // <EFBFBD><EFBFBD>D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0`0c0_04XTn00+T0 d<EFBFBD>v<EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>0
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0b<EFBFBD>0L<EFBFBD>M0zlnY0<EFBFBD>0
if (profit >= Rikaku_pips * xpoint || profit <= -Songiri_pips * xpoint || Exit2() == 2)
{
res = WrapperOrderClose(OrderTicket(),
OrderLots(),
Bid,
NULL,
Green);
}
}
if (OrderType() == OP_SELL)
{
profit = OrderOpenPrice() - Ask; // <EFBFBD>X<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0`0c0_04XTn00+T0 d<EFBFBD>v<EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>0
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0b<EFBFBD>0L<EFBFBD>M0zlnY0<EFBFBD>0
if (profit >= Rikaku_pips * xpoint || profit <= -Songiri_pips * xpoint || Exit1() == 1)
{
res = WrapperOrderClose(OrderTicket(),
OrderLots(),
Ask,
NULL,
Green);
}
}
}
//-------- <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD> --------
//-------- <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 --------
// @b gW0f0D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0SL, TP<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0
for(i=OrdersTotal()-1; i>=0; i--)
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0x<EFBFBD><EFBFBD>b(<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0uX0_04XT0<EFBFBD>0<EFBFBD>0<EFBFBD>0K0<EFBFBD>0<EFBFBD>bQ0<EFBFBD>QY0)
if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false)
{
Print("OrderSelect returned the error of ", GetLastError() );
break;
}
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0L0N<EFBFBD><EFBFBD>W0j0D04XTo00for<EFBFBD>en0HQ-<EFBFBD>k0;b<EFBFBD>0 <EFBFBD>
if (OrderSymbol() != Symbol()) continue;
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0N<EFBFBD><EFBFBD>W0j0D04XTo00for<EFBFBD>en0HQ-<EFBFBD>k0;b<EFBFBD>0 <EFBFBD>
if (OrderMagicNumber() != MagicNumber) continue;
if (OrderType() == OP_BUY)
{
profit = Bid - OrderOpenPrice(); // <EFBFBD><EFBFBD>D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0`0c0_04XTn00+T0 d<EFBFBD>v<EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>0
// TrailingStop<EFBFBD>0<EFBFBD>x<EFBFBD><EFBFBD>Y0<EFBFBD>0
if (profit >= TrailingStopStartPips * xpoint && OrderStopLoss() < NormalizeDouble(Bid - TrailingStopPips * xpoint, Digits()))
{
res = WrapperOrderModify(OrderTicket(),
OrderOpenPrice(),
Bid - TrailingStopPips * xpoint,
OrderTakeProfit(),
0,
Green);
}
// c$Pn0nM0j0J0W0<EFBFBD>0<EFBFBD>x<EFBFBD><EFBFBD>Y0<EFBFBD>0
else if (Bid <= NormalizeDouble(OrderOpenPrice() - ReLimitActionPips * xpoint, Digits())
&& OrderTakeProfit() != NormalizeDouble(OrderOpenPrice() + ReLimitPips * xpoint, Digits()))
{
res = WrapperOrderModify(OrderTicket(),
OrderOpenPrice(),
OrderStopLoss(),
OrderOpenPrice() + ReLimitPips * xpoint,
0,
Green);
}
}
if (OrderType() == OP_SELL)
{
profit = OrderOpenPrice() - Ask; // <EFBFBD>X<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0`0c0_04XTn00+T0 d<EFBFBD>v<EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>0
// TrailingStop<EFBFBD>0<EFBFBD>x<EFBFBD><EFBFBD>Y0<EFBFBD>0
if (profit >= TrailingStopStartPips * xpoint && OrderStopLoss() > NormalizeDouble(Ask + TrailingStopPips * xpoint, Digits()))
{
res = WrapperOrderModify(OrderTicket(),
OrderOpenPrice(),
Ask + TrailingStopPips * xpoint,
OrderTakeProfit(),
0,
Green);
}
// c$Pn0nM0j0J0W0<EFBFBD>0<EFBFBD>x<EFBFBD><EFBFBD>Y0<EFBFBD>0
else if (Ask >= NormalizeDouble(OrderOpenPrice() + ReLimitActionPips * xpoint, Digits())
&& OrderTakeProfit() != NormalizeDouble(OrderOpenPrice() - ReLimitPips * xpoint, Digits()))
{
res = WrapperOrderModify(OrderTicket(),
OrderOpenPrice(),
OrderStopLoss(),
OrderOpenPrice() - ReLimitPips * xpoint,
0,
Green);
}
}
}
//-------- <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD> --------
//-------- <EFBFBD>e<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 --------
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0pe<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0
for(i=OrdersTotal()-1; i>=0; i--)
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0x<EFBFBD><EFBFBD>b(<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0uX0_04XT0<EFBFBD>0<EFBFBD>0<EFBFBD>0K0<EFBFBD>0<EFBFBD>bQ0<EFBFBD>QY0)
if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false)
{
Print("OrderSelect returned the error of ", GetLastError() );
break;
}
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0L0N<EFBFBD><EFBFBD>W0j0D04XTo00for<EFBFBD>en0HQ-<EFBFBD>k0;b<EFBFBD>0 <EFBFBD>
if (OrderSymbol() != Symbol()) continue;
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0N<EFBFBD><EFBFBD>W0j0D04XTo00for<EFBFBD>en0HQ-<EFBFBD>k0;b<EFBFBD>0 <EFBFBD>
if (OrderMagicNumber() != MagicNumber) continue;
if (OrderType() == OP_BUY)
{
CountBuy = CountBuy + 1;
}
if (OrderType() == OP_SELL)
{
CountSell = CountSell + 1;
}
}
double lots = Lots;
double correct_volume;
string message;
//<EFBFBD>l<EFBFBD>epeϑ<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
if (!CheckVolumeValue(Lots, correct_volume, message))
{
// <EFBFBD>l<EFBFBD>epeϑL0 Nckj04XTo00i<EFBFBD>Rj0peϑ<EFBFBD>0-<EFBFBD><EFBFBD>[Y0<EFBFBD>0
Print(message);
lots = correct_volume;
}
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0ag<EFBFBD>N<EFBFBD>0<EFBFBD>x<EFBFBD><EFBFBD>W00b<EFBFBD>zW0f0D0<EFBFBD>0p0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L<EFBFBD>F0
if (Entry() == 1 && CountBuy < maxposition && xxBars != Bars)
{
// <EFBFBD>S_njё<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
if (!CheckMoneyForTrade(OrderSymbol(), lots, OrderType()))
{
return;
}
ticket = WrapperOrderSend(Symbol(),
OP_BUY,
lots,
Ask,
Slippage,
0,
0,
STR_EA_NAME + " " + STR_OP_BUY,
MagicNumber,
0,
Blue);
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0b<EFBFBD>RW0f0D0<EFBFBD>0p00TP, SL<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0
if (ticket != -1)
{
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Oc0f0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0x<EFBFBD><EFBFBD>b(<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0uX0_04XT0UO<EFBFBD>0W0j0D0)
if( OrderSelect( ticket, SELECT_BY_TICKET ) == true )
{
res = WrapperOrderModify(OrderTicket(),
OrderOpenPrice(),
OrderOpenPrice() - StopLoss_pips * xpoint,
OrderOpenPrice() + TakeProfit_pips * xpoint,
0,
MediumSeaGreen);
}
}
xxBars = Bars;
}
else if (Entry() == 2 && CountSell < maxposition && xxBars != Bars)
{
// <EFBFBD>S_njё<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
if (!CheckMoneyForTrade(OrderSymbol(), lots, OrderType()))
{
return;
}
ticket = WrapperOrderSend(Symbol(),
OP_SELL,
lots,
Bid,
Slippage,
0,
0,
STR_EA_NAME + " " + STR_OP_SELL,
MagicNumber,
0,
Red);
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0b<EFBFBD>RW0f0D0<EFBFBD>0p00TP, SL<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0
if (ticket != -1)
{
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Oc0f0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0x<EFBFBD><EFBFBD>b(<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0uX0_04XT0UO<EFBFBD>0W0j0D0)
if( OrderSelect( ticket, SELECT_BY_TICKET ) == true )
{
res = WrapperOrderModify(OrderTicket(),
OrderOpenPrice(),
OrderOpenPrice() + StopLoss_pips * xpoint,
OrderOpenPrice() - TakeProfit_pips * xpoint,
0,
MediumSeaGreen);
}
}
xxBars = Bars;
}
//-------- <EFBFBD>e<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD> --------
}
//0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>Y$Pn00<z<EFBFBD>P<EFBFBD>x<EFBFBD><EFBFBD>b_ <EFBFBD>n0<EFBFBD>{<EFBFBD>Vo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//-------- <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0TP, SLn0<EFBFBD>0<EFBFBD>0<EFBFBD>0 --------
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0TP, SL<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0
for(i=OrdersTotal()-1; i>=0; i--)
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0x<EFBFBD><EFBFBD>b(<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0uX0_04XT0<EFBFBD>0<EFBFBD>0<EFBFBD>0K0<EFBFBD>0<EFBFBD>bQ0<EFBFBD>QY0)
if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false)
{
Print("OrderSelect returned the error of ", GetLastError() );
break;
}
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0L0N<EFBFBD><EFBFBD>W0j0D04XTo00for<EFBFBD>en0HQ-<EFBFBD>k0;b<EFBFBD>0 <EFBFBD>
if (OrderSymbol() != Symbol()) continue;
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0N<EFBFBD><EFBFBD>W0j0D04XTo00for<EFBFBD>en0HQ-<EFBFBD>k0;b<EFBFBD>0 <EFBFBD>
if (OrderMagicNumber() != MagicNumber) continue;
// <EFBFBD><EFBFBD>D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n04XT
if (OrderType() == OP_BUY)
{
profit = Bid - OrderOpenPrice(); // <EFBFBD><EFBFBD>D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0`0c0_04XTn00+T0 d<EFBFBD>v<EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>0
// TP, SLL0i0a0<EFBFBD>0<EFBFBD>0-<EFBFBD><EFBFBD>[U0<EFBFBD>0f0D0j0Q0<EFBFBD>0p00TP, SL<EFBFBD>0-<EFBFBD><EFBFBD>[Y0<EFBFBD>0
if (OrderStopLoss() == 0 && OrderTakeProfit() == 0)
{
res = WrapperOrderModify(OrderTicket(),
OrderOpenPrice(),
OrderOpenPrice() - StopLoss_pips * xpoint,
OrderOpenPrice() + TakeProfit_pips * xpoint,
0,
MediumSeaGreen);
}
}
// <EFBFBD>X<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n04XT
if (OrderType() == OP_SELL)
{
profit = OrderOpenPrice() - Ask; // <EFBFBD>X<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0`0c0_04XTn00+T0 d<EFBFBD>v<EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>0
// TP, SLL0i0a0<EFBFBD>0<EFBFBD>0-<EFBFBD><EFBFBD>[U0<EFBFBD>0f0D0j0Q0<EFBFBD>0p00TP, SL<EFBFBD>0-<EFBFBD><EFBFBD>[Y0<EFBFBD>0
if (OrderStopLoss() == 0 && OrderTakeProfit() == 0)
{
res = WrapperOrderModify(OrderTicket(),
OrderOpenPrice(),
OrderOpenPrice() + StopLoss_pips * xpoint,
OrderOpenPrice() - TakeProfit_pips * xpoint,
0,
MediumSeaGreen);
}
}
}
//-------- <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0TP, SLn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD> --------
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>}<EFBFBD>b |
//+------------------------------------------------------------------+
int Entry()
{
if (Entry_Rule1() == 1 && (Entry_Filter1() == 1 || Entry_Filter1() == 3)
&& (Entry_Filter2() == 1 || Entry_Filter2() == 3)
&& (Entry_Filter3() == 1 || Entry_Filter3() == 3)
&& (Entry_Filter4() == 1 || Entry_Filter4() == 3)
&& (Entry_Filter5() == 1 || Entry_Filter5() == 3)
)
{
return(1);
}
else if (Entry_Rule1() == 2 && (Entry_Filter1() == 2 || Entry_Filter1() == 3)
&& (Entry_Filter2() == 2 || Entry_Filter2() == 3)
&& (Entry_Filter3() == 2 || Entry_Filter3() == 3)
&& (Entry_Filter4() == 2 || Entry_Filter4() == 3)
&& (Entry_Filter5() == 2 || Entry_Filter5() == 3)
)
{
return(2);
}
else
{
return(0);
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>X<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0zln<EFBFBD>}<EFBFBD>b |
//+------------------------------------------------------------------+
int Exit1()
{
if (Exit_Rule1() == 3 && Exit_Rule2() == 3 && Exit_Rule3() == 3 && Exit_Rule4() == 3 && Exit_Rule5() == 3)
{
return(0);
}
else if (Exit_Rule1() == 1)
{
return(1);
}
else if( Exit_Rule2() == 1)
{
return(1);
}
else if (Exit_Rule3() == 1)
{
return(1);
}
else if( Exit_Rule4() == 1)
{
return(1);
}
else if (Exit_Rule5() == 1)
{
return(1);
}
else
{
return(0);
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD><EFBFBD>D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0zln<EFBFBD>}<EFBFBD>b |
//+------------------------------------------------------------------+
int Exit2()
{
if (Exit_Rule1() == 3 && Exit_Rule2() == 3 && Exit_Rule3() == 3 && Exit_Rule4() == 3 && Exit_Rule5() == 3)
{
return(0);
}
else if (Exit_Rule1() == 2)
{
return(2);
}
else if (Exit_Rule2() == 2)
{
return(2);
}
else if (Exit_Rule3() == 2)
{
return(2);
}
else if (Exit_Rule4() == 2)
{
return(2);
}
else if (Exit_Rule5() == 2)
{
return(2);
}
else
{
return(0);
}
}
//+------------------------------------------------------------------+
//| <EFBFBD>l<EFBFBD>epeϑn0ck<EFBFBD>xU0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0 |
//+------------------------------------------------------------------+
bool CheckVolumeValue(double volume,double &correct_volume, string &message)
{
#ifdef _MQL5_COM
// MQL5.com<EFBFBD><EFBFBD><EFBFBD>Ri<EFBFBD>g<EFBFBD>t<EFBFBD>Xn0i<EFBFBD>Q
bool isMQL5Testing = (AccountBalance() <= 1.0 && IsTesting());
if (isMQL5Testing)
{
// MQL5.com<EFBFBD>t<EFBFBD>Xg0o0!qag<EFBFBD>Nk0g\<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0O(u
correct_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
message=StringFormat("Volume is changed to theminimal allowed SYMBOL_VOLUME_MIN=%.2f",correct_volume);
return(true);
}
#endif // _MQL5_COM_
//<EFBFBD>S_<EFBFBD>d\Og01<EFBFBD><EFBFBD>SU0<EFBFBD>0<EFBFBD>0g\peϑ
double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
if(volume<min_volume)
{
message=StringFormat("Volume is less than the minimal allowed SYMBOL_VOLUME_MIN=%.2f",min_volume);
correct_volume = min_volume;
return(false);
}
//<EFBFBD>S_<EFBFBD>d\Og01<EFBFBD><EFBFBD>SU0<EFBFBD>0<EFBFBD>0g'Ypeϑ
double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
if(volume>max_volume)
{
message=StringFormat("Volume is greater than the maximal allowed SYMBOL_VOLUME_MAX=%.2f",max_volume);
correct_volume = max_volume;
return(false);
}
//peϑ Y<EFBFBD>fn0g\<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>_Y0<EFBFBD>0
double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
int ratio=(int)MathRound(volume/volume_step);
if(MathAbs(ratio*volume_step-volume)>0.0000001)
{
message=StringFormat("Volume is not a multiple of the minimal step SYMBOL_VOLUME_STEP=%.2f, the closest correct volume is %.2f",
volume_step,ratio*volume_step);
correct_volume = ratio*volume_step;
return(false);
}
message="Correct volume value";
correct_volume = volume;
return(true);
}
//+------------------------------------------------------------------+
//| <EFBFBD>S_njёL0 N<EFBFBD><EFBFBD>W0f0D0<EFBFBD>0K0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0 |
//+------------------------------------------------------------------+
bool CheckMoneyForTrade(string symbol, double lots,int type)
{
double free_margin = AccountFreeMarginCheck(symbol, type, lots);
// njёL0 N<EFBFBD><EFBFBD>W0f0D0<EFBFBD>04XT
if(free_margin < 0)
{
string op = (type == OP_BUY ? "Buy" : "Sell");
Print("Not enough money for ", op," ",lots, " ", symbol, " Error code=", GetLastError());
return false;
}
return(true);
}
//+------------------------------------------------------------------+
#ifdef _DEVELOPMENT
//+------------------------------------------------------------------+
//| OnTester - c<EFBFBD>[U0<EFBFBD>0_0gi<EFBFBD>S<EFBFBD>0<EFBFBD>0<EFBFBD>0g0gi<EFBFBD>SY0<EFBFBD>0 0000000000000 00|
//+------------------------------------------------------------------+
double OnTester()
{
// <EFBFBD>S_pen0gi<EFBFBD>S<EFBFBD>W<EFBFBD>n$P<EFBFBD>01000k0-<EFBFBD><EFBFBD>[Y0<EFBFBD>0
const double TRADES_STANDARD = 1000.0;
// gi<EFBFBD>S<EFBFBD>W<EFBFBD>n$P<EFBFBD>0RgSY0<EFBFBD>0
double optimization_value = 0.0;
double recovery_factor = 0.0;
double trades_optimization_factor = 0.0;
double win_rate = 0.0;
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>0_0<EFBFBD>00}<EFBFBD>vh0<<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0n0g'Y<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>_Y0<EFBFBD>0
double profit = TesterStatistics(STAT_PROFIT);
double max_drawdown = TesterStatistics(STAT_EQUITY_DD);
// g'Y<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L00<EFBFBD>NYn04XTo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>0
if(max_drawdown != 0)
{
recovery_factor = profit / max_drawdown;
}
// <EFBFBD>S_pe<EFBFBD>0<EFBFBD>S<EFBFBD>_Y0<EFBFBD>0
double trades = TesterStatistics(STAT_TRADES);
// <EFBFBD>S_peL00<EFBFBD>NYn04XTo00<EFBFBD>R<EFBFBD>s<EFBFBD><EFBFBD>}<EFBFBD>Ra0pe/<EFBFBD>}<EFBFBD>S_pe <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>0
if(trades != 0)
{
win_rate = TesterStatistics(STAT_PROFIT_TRADES) / trades;
}
//0<EFBFBD>S_pen0gi<EFBFBD>S<EFBFBD>Ope<EFBFBD>0Bl<EFBFBD>0<EFBFBD>0
trades_optimization_factor = trades / TRADES_STANDARD;
// gi<EFBFBD>S<EFBFBD>W<EFBFBD>n$P = gi<EFBFBD>S<EFBFBD>0<EFBFBD>0<EFBFBD>0k0<EFBFBD>_X0_0<EFBFBD><EFBFBD> }n0$Pn0Mz<EFBFBD>{$P
switch(OP_Type)
{
case OPTYPE_RF_ONLY:
optimization_value = recovery_factor;
break;
case OPTYPE_TR_ONLY:
optimization_value = trades_optimization_factor;
break;
case OPTYPE_WR_ONLY:
optimization_value = win_rate;
break;
case OPTYPE_RF_TR:
optimization_value = recovery_factor * trades_optimization_factor;
break;
case OPTYPE_RF_WR:
optimization_value = recovery_factor * win_rate;
break;
case OPTYPE_TR_WR:
optimization_value = trades_optimization_factor * win_rate;
break;
case OPTYPE_RF_TR_WR:
optimization_value = recovery_factor * trades_optimization_factor * win_rate;
break;
case OPTYPE_NONE:
optimization_value = 0.0;
break;
default:
optimization_value = 0.0;
break;
}
return(optimization_value);
}
//+------------------------------------------------------------------+
#endif // _DEVELOPMENT
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0f0D0<EFBFBD>0K0<EFBFBD>x<EFBFBD><EFBFBD>Y0<EFBFBD>0 000000000 |
//+------------------------------------------------------------------+
bool IsMarketOpen(string symbol = NULL, int mode = SYMBOL_TRADE_MODE_FULL)
{
datetime currentTime = TimeCurrent();
// c<EFBFBD>[U0<EFBFBD>0_0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>S_Bf<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>S<EFBFBD>_
int tradingHours = (int)SymbolInfoInteger(symbol, SYMBOL_TRADE_MODE);
// <EFBFBD>S_Bf<EFBFBD><EFBFBD>k0<EFBFBD>We0D0f0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>rKa<EFBFBD>0$R<EFBFBD>e
if (tradingHours == SYMBOL_TRADE_MODE_DISABLED)
{
// <EFBFBD>S_ N<EFBFBD>S
return false;
}
else if (tradingHours == SYMBOL_TRADE_MODE_CLOSEONLY)
{
if (mode == SYMBOL_TRADE_MODE_CLOSEONLY)
{
// zln<EFBFBD>l<EFBFBD>en00<EFBFBD>S<EFBFBD><EFBFBD>
return true;
}
else
{
// <EFBFBD>S_ N<EFBFBD>S
return false;
}
}
else if (tradingHours == SYMBOL_TRADE_MODE_FULL)
{
// <EFBFBD>8^<EFBFBD>S_<EFBFBD>S<EFBFBD><EFBFBD>
return true;
}
//
N<EFBFBD><EFBFBD>NYn04XTo0<EFBFBD>S_ N<EFBFBD>Sh0$R<EFBFBD>e
return false;
}
//+------------------------------------------------------------------+
//| <EFBFBD>O<h<EFBFBD>0pipsXSMOK0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>XSMOk0 Y<EFBFBD>cY0<EFBFBD>0 |
//+------------------------------------------------------------------+
double PipsToPrice(
double pips // <EFBFBD><EFBFBD><EFBFBD>XSMOk0 Y<EFBFBD>cY0<EFBFBD>0pips$P
)
{
// <EFBFBD>c<EFBFBD>{P}<EFBFBD>gn0<EFBFBD>O<h$P<EFBFBD>0<EFBFBD>[<EFBFBD>Y0<EFBFBD>0
double price = 0;
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0\pe<EFBFBD>p<EFBFBD>N NAhpe<EFBFBD>OcXSMOk0<EFBFBD>_X0f00<EFBFBD>c<EFBFBD>{n0_0<EFBFBD>0n0 Ppe<EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>0
int digits = Digits();
// 3Ah<EFBFBD>05Ahn0FX<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n04XT
if(digits == 3 || digits == 5){
price = pips / MathPow(10, digits) * 10;
}
// 2Ah<EFBFBD>04Ahn0FX<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n04XT
if(digits == 2 || digits == 4){
price = pips / MathPow(10, digits);
}
// <EFBFBD>O<h<EFBFBD>0 g<EFBFBD>RAhpeg08N<EFBFBD>0<EFBFBD>0
price = NormalizeDouble(price, digits);
return(price);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>v4Xn04XT0true<EFBFBD>0ԏY0 |
//+------------------------------------------------------------------+
bool IsTrending(int from = 1)
{
//ADXL0@b<EFBFBD>[n0g<EFBFBD><EFBFBD>-N0c<EFBFBD>[$P<EFBFBD>N
Nn0Bfo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>v4XL0<EFBFBD>}<EFBFBD>}W0f0D0<EFBFBD>0<EFBFBD>0n0h0Y0<EFBFBD>0
for(int i = from; i <= ADX_Trend_Duration; i++)
{
//ADXL0c<EFBFBD>[$P<EFBFBD>0<EFBFBD>0\U0D04XTo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0<EFBFBD>}<EFBFBD>}W0f0D0j0D0h0W0f00false<EFBFBD>0ԏY0
double adx = iADX(NULL, 0, ADX_Trend_Period, PRICE_CLOSE, MODE_MAIN, i);
if(adx < ADX_Trend_Level)
{
return(false);
}
}
return(true);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>v4Xn04XT0true<EFBFBD>0ԏY0 |
//+------------------------------------------------------------------+
bool IsRanging(int from = 1)
{
//ADXL0@b<EFBFBD>[n0g<EFBFBD><EFBFBD>-N0c<EFBFBD>[$P<EFBFBD>N Nn0Bfo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>v4XL0<EFBFBD>}<EFBFBD>}W0f0D0<EFBFBD>0<EFBFBD>0n0h0Y0<EFBFBD>0
for(int i = from; i <= ADX_Range_Duration; i++)
{
//ADXL0c<EFBFBD>[$P<EFBFBD>0<EFBFBD>0'YM0D04XTo00<EFBFBD>0<EFBFBD>0<EFBFBD>0L0<EFBFBD>}<EFBFBD>}W0f0D0j0D0h0W0f00false<EFBFBD>0ԏY0
double adx = iADX(NULL, 0, ADX_Range_Period, PRICE_CLOSE, MODE_MAIN, i);
if(adx > ADX_Range_Level)
{
return(false);
}
}
return(true);
}
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0+<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>v4Xn04XT0true<EFBFBD>0ԏY0 |
//+------------------------------------------------------------------+
bool IsBoth(int from = 1)
{
return(IsTrending(from) && IsRanging(from));
}
//+------------------------------------------------------------------+
//| <EFBFBD>v4X<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0ԏY0 000000000 |
//+------------------------------------------------------------------+
MKTTYPE GetMktType(int from = 1)
{
MKTTYPE type = MKTTYPE_NONE;
if(IsTrending(from) && IsRanging(from))
{
type = MKTTYPE_BOTH;
}
else if(IsTrending(from) && !IsRanging(from))
{
type = MKTTYPE_TRENDING;
}
else if(!IsTrending(from) && IsRanging(from))
{
type = MKTTYPE_RANGE;
}
return(type);
}
//+------------------------------------------------------------------+
//| <EFBFBD>v4X<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>eW[R<EFBFBD>0ԏY0 00000 |
//+------------------------------------------------------------------+
string MktTypeToString(MKTTYPE type)
{
switch(type)
{
case MKTTYPE_NONE:
return("");
case MKTTYPE_TRENDING:
return("TRENDING");
case MKTTYPE_RANGE:
return("RANGE");
case MKTTYPE_BOTH:
return("BOTH");
default:
return("");
}
return("");
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01 |
//+------------------------------------------------------------------+
int Entry_Rule1()
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00 N<EFBFBD><EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
#ifdef _DEVELOPMENT
Comment(MktTypeToString(GetMktType()));
#endif // _DEVELOPMENT
// <EFBFBD>wg<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}L00w<EFBFBD>g<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}<EFBFBD>0 N<EFBFBD>Vc0_0<EFBFBD>0 0<EFBFBD>X<EFBFBD>0 0
// <EFBFBD>wg<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}L00w<EFBFBD>g<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}<EFBFBD>0
N<EFBFBD>Vc0_0<EFBFBD>0 0<EFBFBD><EFBFBD>D0 0
double ma11 = iMA(NULL, 0, MA_Period1, 0, MODE_SMA, PRICE_CLOSE, 1);
double ma12 = iMA(NULL, 0, MA_Period1, 0, MODE_SMA, PRICE_CLOSE, 2);
double ma21 = iMA(NULL, 0, MA_Period2, 0, MODE_SMA, PRICE_CLOSE, 1);
double ma22 = iMA(NULL, 0, MA_Period2, 0, MODE_SMA, PRICE_CLOSE, 2);
// <EFBFBD>wg<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}L0w<EFBFBD>g<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}<EFBFBD>0
N<EFBFBD>bQ0<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD>g0 0<EFBFBD><EFBFBD>D0 0
if(ma11 > ma21 && ma12 <= ma22)
{
return(1);
} // <EFBFBD><EFBFBD>D0
// <EFBFBD>wg<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}L0w<EFBFBD>g<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}<EFBFBD>0 N<EFBFBD>bQ0<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD>g0 0<EFBFBD>X<EFBFBD>0 0
else if(ma11 < ma21 && ma12 >= ma22)
{
return(2);
} // <EFBFBD>X<EFBFBD>0
return(0);
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01 |
//+------------------------------------------------------------------+
int Entry_Filter1()
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00 N<EFBFBD><EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0E^<EFBFBD>
NtP<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 NtP<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0$P <EFBFBD>L00c<EFBFBD>[<EFBFBD><EFBFBD>N
Nn0Bfk0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0S0h0L0<EFBFBD>S<EFBFBD><EFBFBD>
double upper_bb1 = iBands(NULL, 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_UPPER, 1);
double lower_bb1 = iBands(NULL, 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_LOWER, 1);
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0E^<EFBFBD>
NtP<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 NtP<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0$P <EFBFBD>L00c<EFBFBD>[<EFBFBD><EFBFBD>0<EFBFBD>0\U0D0Bfo0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0g0M0j0D0
if((upper_bb1 - lower_bb1) / Close[1] * 100.0 < BB_Width)
{
return(0);
} // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0g0M0j0D0
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>02 |
//+------------------------------------------------------------------+
int Entry_Filter2()
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>02<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00 N<EFBFBD><EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
// <EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}k0<EFBFBD>[W0<EFBFBD>O<hL00c<EFBFBD>[%<EFBFBD>N
NVN<EFBFBD><EFBFBD>W0_0<EFBFBD>0 0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0j0D0 00
double ma1 = iMA(NULL, 0, MA_Period1, 0, MODE_SMA, PRICE_CLOSE, 1);
// <EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}k0<EFBFBD>[W0<EFBFBD>O<hL00c<EFBFBD>[%<EFBFBD>N
N0
Nk0VN<EFBFBD><EFBFBD>W0_0<EFBFBD>0 0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0j0D0 00
if (ma1 < Close[1] && (Close[1] - ma1) / ma1 > MA_Deviation / 100.0)
{
return(0);
} // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0j0D0
// <EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}k0<EFBFBD>[W0<EFBFBD>O<hL00c<EFBFBD>[%<EFBFBD>N
N0 Nk0VN<EFBFBD><EFBFBD>W0_0<EFBFBD>0 0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0j0D0 00
else if (ma1 > Close[1] && (ma1 - Close[1]) / ma1 > MA_Deviation / 100.0)
{
return(0);
} // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0j0D0
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>02<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>03 |
//+------------------------------------------------------------------+
int Entry_Filter3()
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>03<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00 N<EFBFBD><EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
double ma11 = iMA(NULL, 0, MA_Period1, 0, MODE_SMA, PRICE_CLOSE, 1);
double ma12 = iMA(NULL, 0, MA_Period1, 0, MODE_SMA, PRICE_CLOSE, 2);
double ma21 = iMA(NULL, 0, MA_Period2, 0, MODE_SMA, PRICE_CLOSE, 1);
double ma22 = iMA(NULL, 0, MA_Period2, 0, MODE_SMA, PRICE_CLOSE, 2);
if(IsBoth())
{
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>v4X0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>v4Xn0D0Z0<EFBFBD>0<EFBFBD>0zvuW0f0D0<EFBFBD>04XTo00<EFBFBD>wg<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}k0<EFBFBD>[W0f0<EFBFBD>5_<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
if(ma11 > ma12)
{
return(1);
} // <EFBFBD><EFBFBD>D0
else if(ma11 < ma12)
{
return(2);
} // <EFBFBD>X<EFBFBD>0
else
{
return(0);
} //0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0j0D0
}
else if(IsRanging() && !IsTrending())
{
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>v4XL0zvuW0f0D0_0<EFBFBD>00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>L0<EFBFBD>wg<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}<EFBFBD>0<EFBFBD><EFBFBD>H0_0<EFBFBD>eTk0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
if(Close[1] > ma11)
{
return(1);
} // <EFBFBD><EFBFBD>D0
else if(Close[1] < ma11)
{
return(2);
} // <EFBFBD>X<EFBFBD>0
else
{
return(0);
} //0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0j0D0
}
else if(IsTrending() && !IsRanging())
{
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>v4XL0zvuW0f0D0_0<EFBFBD>00w<EFBFBD>g<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}k0<EFBFBD>[W0f0<EFBFBD>5_<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
if(ma21 > ma22)
{
return(2);
} // <EFBFBD>X<EFBFBD>0
else if(ma21 < ma22)
{
return(1);
} // <EFBFBD><EFBFBD>D0
else
{
return(0);
} //0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0j0D0
}
else
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>v4X0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>v4Xn0D0Z0<EFBFBD>0<EFBFBD>0zvuW0f0D0j0Q0<EFBFBD>0p00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0j0D0
return(0);
}
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>03<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>04 |
//+------------------------------------------------------------------+
int Entry_Filter4()
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>04<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00 N<EFBFBD><EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
double spread = MarketInfo(NULL, MODE_SPREAD);
if(Digits == 3 || Digits == 5)
spread /= 10.0;
if(spread > MaxSpread)
return(0); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 N1<EFBFBD><EFBFBD>S
else
return(3); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01<EFBFBD><EFBFBD>S
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>04<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>05 |
//+------------------------------------------------------------------+
int Entry_Filter5()
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>05<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00 N<EFBFBD><EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
// 6RP<EFBFBD>n0<EFBFBD><EFBFBD><EFBFBD>R<EFBFBD><EFBFBD>d<EFBFBD>
if (TimeCurrent() > lastEntryRestrictionTime + (restrictionCount > 0 ? 3600 * MathPow(4, restrictionCount) : 0))
{
lastEntryRestrictionTime = 0;
restrictionCount = 0;
}
// Y0g0k06RP<EFBFBD>-Nn04XTo0sS<EFBFBD>^k0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>b&T
if (lastEntryRestrictionTime > 0)
{
return(0);
}
// d1Y<EFBFBD>{tn0_0<EFBFBD>0n0<EFBFBD><EFBFBD>{
int consecutive_losses = 0;
double total_loss_per_lot = 0.0;
// N<EFBFBD><EFBFBD>Sn0<EFBFBD>S_e\tk<EFBFBD>0<EFBFBD>x<EFBFBD><EFBFBD>
for(int i = OrdersHistoryTotal()-1; i >= MathMax(0, OrdersHistoryTotal()-Loss_Lookback_Count); i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
// pips<EFBFBD>0<EFBFBD>0<EFBFBD>0g0n0 d<EFBFBD>v<EFBFBD><EFBFBD>{
double pips_multiplier = (Digits == 3 || Digits == 5) ? 10 : 1;
double pip_value = Point * pips_multiplier;
double trade_pips;
if(OrderType() == OP_BUY)
{
trade_pips = (OrderClosePrice() - OrderOpenPrice()) / pip_value;
}
else
{
trade_pips = (OrderOpenPrice() - OrderClosePrice()) / pip_value;
}
// 1<EFBFBD>0<EFBFBD>0<EFBFBD>0B0_0<EFBFBD>0n0 d1Ypips<EFBFBD>0<EFBFBD><EFBFBD>{
double loss_per_lot = MathAbs(trade_pips) / OrderLots();
if(trade_pips < 0)
{
consecutive_losses++;
total_loss_per_lot += loss_per_lot;
}
else
{
break; // )R<EFBFBD>vL0<EFBFBD>Q_0<EFBFBD>S_g0B}<EFBFBD>N
}
}
}
}
// <EFBFBD>s(Wn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
double atr = iATR(NULL, 0, ATR_Period_Filter, 1);
double atr_ma = 0;
for(int i = 1; i <= ATR_Period_Filter; i++)
{
atr_ma += iATR(NULL, 0, ATR_Period_Filter, i);
}
atr_ma /= ATR_Period_Filter;
bool is_high_volatility = (atr > atr_ma * ATR_Volatility_Threshold);
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>{tk0<EFBFBD>0<EFBFBD>06R<EFBFBD>_
if(consecutive_losses >= Max_Consecutive_Losses && total_loss_per_lot > Max_Loss_Pips)
{
// 6RP<EFBFBD>Bf<EFBFBD><EFBFBD>h06RP<EFBFBD><EFBFBD>Vpe<EFBFBD>0-<EFBFBD><EFBFBD>[
lastEntryRestrictionTime = TimeCurrent();
restrictionCount++;
return(0);
}
if(is_high_volatility && total_loss_per_lot > High_Vol_Loss_Limit)
{
// 6RP<EFBFBD>Bf<EFBFBD><EFBFBD>h06RP<EFBFBD><EFBFBD>Vpe<EFBFBD>0-<EFBFBD><EFBFBD>[
lastEntryRestrictionTime = TimeCurrent();
restrictionCount++;
return(0);
}
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>05<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| zln<EFBFBD>0<EFBFBD>0<EFBFBD>01 |
//+------------------------------------------------------------------+
int Exit_Rule1()
{
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>01<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00 N<EFBFBD><EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
//<EFBFBD>wg<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}L00w<EFBFBD>g<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}<EFBFBD>0 N<EFBFBD>Vc0_0<EFBFBD>0 0zln<EFBFBD>X<EFBFBD>0 0
//<EFBFBD>wg<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}L00w<EFBFBD>g<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}<EFBFBD>0
N<EFBFBD>Vc0_0<EFBFBD>0 0zln<EFBFBD><EFBFBD>D0 0
double ma11 = iMA(NULL, 0, MA_Period1, 0, MODE_SMA, PRICE_CLOSE, 1);
double ma12 = iMA(NULL, 0, MA_Period1, 0, MODE_SMA, PRICE_CLOSE, 2);
double ma21 = iMA(NULL, 0, MA_Period2, 0, MODE_SMA, PRICE_CLOSE, 1);
double ma22 = iMA(NULL, 0, MA_Period2, 0, MODE_SMA, PRICE_CLOSE, 2);
//<EFBFBD>wg<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}L00w<EFBFBD>g<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}<EFBFBD>0 N<EFBFBD>Vc0_0<EFBFBD>0<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD> 0zln<EFBFBD>X<EFBFBD>0 0
if(ma11 < ma21 && ma12 >= ma22)
{
return(2);
} //zln<EFBFBD>X<EFBFBD>0
//<EFBFBD>wg<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}L00w<EFBFBD>g<EFBFBD>y<EFBFBD>Rs^GW<EFBFBD>}<EFBFBD>0
N<EFBFBD>Vc0_0<EFBFBD>0<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD> 0zln<EFBFBD><EFBFBD>D0 0
else if(ma11 > ma21 && ma12 <= ma22)
{
return(1);
} //zln<EFBFBD><EFBFBD>D0
else
{
return(0);
}
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>01<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| zln<EFBFBD>0<EFBFBD>0<EFBFBD>02 |
//+------------------------------------------------------------------+
int Exit_Rule2()
{
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>02<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00 N<EFBFBD><EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
// B}$PL0)R<EFBFBD>x<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0$P<EFBFBD>0<EFBFBD><EFBFBD>H0f0D0<EFBFBD>04XT0)R<EFBFBD>xzln
double upper_bb1 = iBands(NULL, 0, BB_TP_Period, BB_TP_Deviation, 0, PRICE_CLOSE, MODE_UPPER, 1);
double lower_bb1 = iBands(NULL, 0, BB_TP_Period, BB_TP_Deviation, 0, PRICE_CLOSE, MODE_LOWER, 1);
double upper_bb2 = iBands(NULL, 0, BB_TP_Period, BB_TP_Deviation, 0, PRICE_CLOSE, MODE_UPPER, 2);
double lower_bb2 = iBands(NULL, 0, BB_TP_Period, BB_TP_Deviation, 0, PRICE_CLOSE, MODE_LOWER, 2);
// B}$PL0
NtPn0)R<EFBFBD>x<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0$P<EFBFBD>0<EFBFBD>0'YM0Q0<EFBFBD>0p00 0zln<EFBFBD>X<EFBFBD>0 0
if(Close[1] > upper_bb1 && Close[2] <= upper_bb2)
{
return(2);
} // zln<EFBFBD>X<EFBFBD>0
// B}$PL0 NtPn0)R<EFBFBD>x<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0$P<EFBFBD>0<EFBFBD>0\U0Q0<EFBFBD>0p00 0zln<EFBFBD><EFBFBD>D0 0
else if(Close[1] < lower_bb1 && Close[2] >= lower_bb2)
{
return(1);
} // zln<EFBFBD><EFBFBD>D0
else
{
return(0);
}
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>02<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| zln<EFBFBD>0<EFBFBD>0<EFBFBD>03 |
//+------------------------------------------------------------------+
int Exit_Rule3()
{
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>03<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00 N<EFBFBD><EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
// B}$PL0 dR<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0$P<EFBFBD>0<EFBFBD><EFBFBD>H0f0D0<EFBFBD>04XT0 dR<EFBFBD>0zln
double upper_bb1 = iBands(NULL, 0, BB_SL_Period, BB_SL_Deviation, 0, PRICE_CLOSE, MODE_UPPER, 1);
double lower_bb1 = iBands(NULL, 0, BB_SL_Period, BB_SL_Deviation, 0, PRICE_CLOSE, MODE_LOWER, 1);
double upper_bb2 = iBands(NULL, 0, BB_SL_Period, BB_SL_Deviation, 0, PRICE_CLOSE, MODE_UPPER, 2);
double lower_bb2 = iBands(NULL, 0, BB_SL_Period, BB_SL_Deviation, 0, PRICE_CLOSE, MODE_LOWER, 2);
// B}$PL0
NtPn0 dR<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0$P<EFBFBD>0<EFBFBD>0'YM0Q0<EFBFBD>0p00 0zln<EFBFBD><EFBFBD>D0 0
if(Close[1] > upper_bb1 && Close[2] <= upper_bb2)
{
return(1);
} // zln<EFBFBD><EFBFBD>D0
// B}$PL0 NtPn0 dR<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0$P<EFBFBD>0<EFBFBD>0\U0Q0<EFBFBD>0p00 0zln<EFBFBD>X<EFBFBD>0 0
else if(Close[1] < lower_bb1 && Close[2] >= lower_bb2)
{
return(2);
} // zln<EFBFBD>X<EFBFBD>0
else
{
return(0);
}
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>03<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| zln<EFBFBD>0<EFBFBD>0<EFBFBD>04 |
//+------------------------------------------------------------------+
int Exit_Rule4()
{
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>04<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00 N<EFBFBD><EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
double tp_price = OrderOpenPrice();
if(OrderType() == OP_BUY)
{
// <EFBFBD><EFBFBD>D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n04XT0@b<EFBFBD>[n0<EFBFBD>]R$P<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0_0<EFBFBD>O<h<EFBFBD>0B}$PL0 N<EFBFBD>Vc0_04XT0 0zln<EFBFBD>X<EFBFBD>0 0
tp_price += iBarShift(NULL, 0, OrderOpenTime()) * PipsToPrice(TP_Delta);
if(Close[1] < tp_price && Close[2] >= tp_price && (Bid - OrderOpenPrice()) > 0.0)
{
return(2);
} // zln<EFBFBD>X<EFBFBD>0
}
else if(OrderType() == OP_SELL)
{
// <EFBFBD>X<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n04XT0@b<EFBFBD>[n0<EFBFBD>]R$P<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0_0<EFBFBD>O<h<EFBFBD>0B}$PL0
N<EFBFBD>Vc0_04XT0 0zln<EFBFBD><EFBFBD>D0 0
tp_price -= iBarShift(NULL, 0, OrderOpenTime()) * PipsToPrice(TP_Delta);
if(Close[1] > tp_price && Close[2] <= tp_price && (OrderOpenPrice() - Ask) > 0.0)
{
return(1);
} // zln<EFBFBD><EFBFBD>D0
}
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>04<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| zln<EFBFBD>0<EFBFBD>0<EFBFBD>05 |
//+------------------------------------------------------------------+
int Exit_Rule5()
{
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>05<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00 N<EFBFBD><EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>05<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0<EFBFBD>0Bfo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>]W0<EFBFBD>fH0f0 NU0D00
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>pe<EFBFBD>0 |
//+------------------------------------------------------------------+
// OrderSendn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>pe
// 0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n06R}k0TF0b_k0SL0TP<EFBFBD>0<EFBFBD>OckW0_0n0a0zv<EFBFBD>lW0
// OederSendn0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bfn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0J0<EFBFBD>0s0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>Qt<EFBFBD>0<EFBFBD>[<EFBFBD>eY0<EFBFBD>0
int WrapperOrderSend(string symbol, // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
int cmd, // <EFBFBD>l<EFBFBD>en0.z^<EFBFBD>
double volume, // <EFBFBD>0<EFBFBD>0<EFBFBD>0
double price, // <EFBFBD>l<EFBFBD>e<EFBFBD>O<h
int slippage, // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
double stoploss, // StopLoss
double takeprofit, // TakeProfit
string comment=NULL, // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
int magic=0, // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
datetime expiration=0, // g<EFBFBD>RgP<EFBFBD>
color arrow_color=clrNONE // <EFBFBD>wpSn0<EFBFBD>0<EFBFBD>0<EFBFBD>0
)
{
int i;
int err = 0; // <EFBFBD>0<EFBFBD>0<EFBFBD>0No.
int res = 0; // OrderSendn0;b<EFBFBD>0$P
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0~0g0<EFBFBD>__jY0<EFBFBD>0
datetime currentTime = TimeCurrent();
datetime waitEndTime = currentTime + TIME_WAIT_FOR_MARKET_OPEN;
while (TimeCurrent() < waitEndTime)
{
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0f0D0_0<EFBFBD>00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>bQ0<EFBFBD>0
if (IsMarketOpen())
{
break;
}
// !kn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0~0g0500msec<EFBFBD>_d0
Sleep(500);
}
// MAX_ORDER_REPEAT<EFBFBD>Vpe`0Q0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0
for ( i=0; i<MAX_ORDER_REPEAT; i++ )
{
res = OrderSend(symbol,
cmd,
volume,
NormalizeDouble(price, Digits()),
slippage,
NormalizeDouble(stoploss, Digits()),
NormalizeDouble(takeprofit, Digits()),
comment,
magic,
expiration,
arrow_color);
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0zv<EFBFBD>lk0b<EFBFBD>RW0_04XT0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0No.<EFBFBD>0ԏW0<EFBFBD><EFBFBD>pe<EFBFBD>0B}<EFBFBD>NY0<EFBFBD>0
if ( res != -1 ) return(res);
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0zv<EFBFBD>lk01YWeW0_04XT0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<EFBFBD>:yW0_0n0a0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0
if ( res == -1 )
{
err = GetLastError();
Print("OrderSend return error: code=",err, ", Error=", ErrorDescription(err));
// !kn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0~0g0500msec<EFBFBD>_d0
Sleep(500);
}
}
return(res);
}
// OrderModifyn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>pe
// 0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n06R}k0TF0b_k0SL0TP<EFBFBD>0<EFBFBD>OckW0_0n0a0zv<EFBFBD>lW0
// OederModifyn0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bfn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0J0<EFBFBD>0s0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>Qt<EFBFBD>0<EFBFBD>[<EFBFBD>eY0<EFBFBD>0
bool WrapperOrderModify(int ticket, // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
double price, // <EFBFBD>l<EFBFBD>e<EFBFBD>O<h
double stoploss, // StopLoss
double takeprofit, // TakeProfit
datetime expiration, // g<EFBFBD>RgP<EFBFBD>
color arrow_color // <EFBFBD>wpSn0<EFBFBD>0<EFBFBD>0<EFBFBD>0
)
{
int i;
int err = 0; // <EFBFBD>0<EFBFBD>0<EFBFBD>0No.
bool res = false; // OrderModifyn0;b<EFBFBD>0$P
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0~0g0<EFBFBD>__jY0<EFBFBD>0
datetime currentTime = TimeCurrent();
datetime waitEndTime = currentTime + TIME_WAIT_FOR_MARKET_OPEN;
while (TimeCurrent() < waitEndTime)
{
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0f0D0_0<EFBFBD>00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>bQ0<EFBFBD>0
if (IsMarketOpen())
{
break;
}
// !kn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0~0g0500msec<EFBFBD>_d0
Sleep(500);
}
// MAX_ORDER_REPEAT<EFBFBD>Vpe`0Q0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0
for ( i=0; i<MAX_ORDER_REPEAT; i++ )
{
res = OrderModify(ticket,
NormalizeDouble(price, Digits()),
NormalizeDouble(stoploss, Digits()),
NormalizeDouble(takeprofit, Digits()),
expiration,
arrow_color);
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0zv<EFBFBD>lk0b<EFBFBD>RW0_04XT0B}<EFBFBD>N<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0ԏY0
if (res) return(res);
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0zv<EFBFBD>lk01YWeW0_04XT0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<EFBFBD>:yW0_0n0a0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0
if ( !res )
{
err = GetLastError();
Print("OrderModify return error: code=",err, ", Error=", ErrorDescription(err));
// !kn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0~0g0500msec<EFBFBD>_d0
Sleep(500);
}
}
return(res);
}
// OrderClosen0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>pe
// 0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n06R}k0TF0b_k0SL0TP<EFBFBD>0<EFBFBD>OckW0_0n0a0zv<EFBFBD>lW0
// OederClosen0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bfn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0J0<EFBFBD>0s0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>Qt<EFBFBD>0<EFBFBD>[<EFBFBD>eY0<EFBFBD>0
bool WrapperOrderClose(int ticket, // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
double lots, // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
double price, // <EFBFBD>l<EFBFBD>e<EFBFBD>O<h
int slippage, // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
color arrow_color // <EFBFBD>wpSn0<EFBFBD>0<EFBFBD>0<EFBFBD>0
)
{
int i;
int err = 0; // <EFBFBD>0<EFBFBD>0<EFBFBD>0No.
bool res = false; // OrderClosen0;b<EFBFBD>0$P
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0~0g0<EFBFBD>__jY0<EFBFBD>0
datetime currentTime = TimeCurrent();
datetime waitEndTime = currentTime + TIME_WAIT_FOR_MARKET_OPEN;
while (TimeCurrent() < waitEndTime)
{
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0f0D0_0<EFBFBD>00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>bQ0<EFBFBD>0
if (IsMarketOpen(NULL, SYMBOL_TRADE_MODE_CLOSEONLY))
{
break;
}
// !kn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0~0g0500msec<EFBFBD>_d0
Sleep(500);
}
// MAX_ORDER_REPEAT<EFBFBD>Vpe`0Q0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0
for ( i=0; i<MAX_ORDER_REPEAT; i++ )
{
res = OrderClose(ticket,
lots,
NormalizeDouble(price, Digits()),
slippage,
arrow_color);
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0zv<EFBFBD>lk0b<EFBFBD>RW0_04XT0B}<EFBFBD>N<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0ԏY0
if ( res ) return(res);
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0zv<EFBFBD>lk01YWeW0_04XT0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<EFBFBD>:yW0_0n0a0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0
if ( !res )
{
err = GetLastError();
Print("OrderClose return error: code=",err, ", Error=", ErrorDescription(err));
// !kn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0~0g0500msec<EFBFBD>_d0
Sleep(500);
}
}
return(res);
}