gryps2/EA-code/TNK/MSA-005S_XAUUSD_M5.mq4

1840 lines
139 KiB
MQL4
Raw Permalink Normal View History

2025-05-30 14:58:21 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| YMS-18_USDJPY_M5.mq4 |
//| Copyright 2024, TNK/TNK_SYSTEM |
//| https://note.com/tnk_system |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, TNK/TNK_SYSTEM"
#property link "https://note.com/tnk_system"
#property version "1.1" // MA<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>05Rk0 Y<EFBFBD>f
#property icon "TNKIcon.ico" // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>0<EFBFBD><EFBFBD>0
#property strict
#include <stdlib.mqh>
//#define ROSOKU_Check
//#define MQLDebug_OPCL
//#define MQLDebug_SLTP
//#include <MQL4to5.mqh>
#property description "[<1A><><EFBFBD><EFBFBD>0<EFBFBD>0] XAUUSD [Bf<42><66><EFBFBD><EFBFBD>] M5"
#property description "[<00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0] <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 [<00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0pe] 1"
#property description "[!N<>^f0] !qW0 [<00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0] !qW0 [1<>+gca0<61><30>W0] !qW0"
#property description "[g'YTP/SL] 200/120 pips<08> Y<>f N<EFBFBD>S <EFBFBD>"
#property description "[t^+gt^<5E>Y] <00>e<EFBFBD><65><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0!qW0<57>0zlnn00<7F>[L<><08>12/20~1/3 <09>"
#property description "[<00>S<EFBFBD>^] <00>e<EFBFBD><65>5,g<08>GMT<00>Q+2/Y+3 <09>\(u"
//string limitDate = "2025.3.31 23:59"; // g<EFBFBD><EFBFBD>6RP<EFBFBD>
//int validAccount1 = 81154073; // <EFBFBD>S<EFBFBD>^~<EFBFBD>01
//int validAccount2 = 230087286; // <EFBFBD>S<EFBFBD>^~<EFBFBD>02
//+------------------------------------------------------------------+
//|<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0eQ<EFBFBD>R(u<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 |
//+------------------------------------------------------------------+
input int MagicNumber = 31491; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>NEAh0͑<EFBFBD> N<EFBFBD>S <EFBFBD>
input double Lots = 0.24; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>XS)RK<EFBFBD>(uBf <EFBFBD>
input double MM_Risk = 1.0; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>)Rx<EFBFBD><EFBFBD>b<EFBFBD><EFBFBD>vn0UO%K0 <EFBFBD>
enum MM_Select{
Fixed, // 0<EFBFBD>XS)R/<EFBFBD>V<EFBFBD>[
FreeMargin, // 1<EFBFBD><EFBFBD>)R/YOpR<<EFBFBD><EFBFBD>
Balance, // 2<EFBFBD><EFBFBD>)R/<EFBFBD>
};
input MM_Select MM_ON = Fixed; // <EFBFBD>)R_j<EFBFBD><EFBFBD><EFBFBD>0:<EFBFBD>V<EFBFBD>[/1:YOpR<<EFBFBD><EFBFBD>/2:<EFBFBD> <EFBFBD>
double MaxSpread_pips = 5.0; // 1<EFBFBD><EFBFBD>[<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>Pips <EFBFBD>
input double AllowSpread = 10.0; // 1<EFBFBD><EFBFBD>[<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Pips<EFBFBD>0:<EFBFBD><EFBFBD><EFBFBD>R <EFBFBD>
input bool Recording = false; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>`1X<EFBFBD>Q<EFBFBD>R<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0I{ <EFBFBD>
input bool VisualHistory = false; // <EFBFBD>S_e\tk<EFBFBD>}<EFBFBD>0pips<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0h<EFBFBD>:y
//+------------------------------------------------------------------+
//|<EFBFBD>Q<EFBFBD><EFBFBD>-<EFBFBD><EFBFBD>[<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>pe |
//+------------------------------------------------------------------+
//<EFBFBD>Q<EFBFBD><EFBFBD>-<EFBFBD><EFBFBD>[
string _Comment = "MSA-005S_XAUUSD_M5"; // <EFBFBD><EFBFBD>w(u<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
int Maxposition = 1; // g'Y<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
int Slippage = 100; // 1<EFBFBD><EFBFBD>[<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>Point <EFBFBD>
int TakeProfit_pips = 100; // )R<EFBFBD>xc$P<EFBFBD>Pips <EFBFBD>
int StopLoss_pips = 120; // dR<EFBFBD>c$P<EFBFBD>Pips <EFBFBD>
bool YearendClose = true; // t^+gt^<EFBFBD>Y\Pbk
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0AhT<EFBFBD>0[0<EFBFBD>0Bf<EFBFBD><EFBFBD>6R<EFBFBD>_(u
double xpoint;
int xxBars = 0;
int xxTime;
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(u<EFBFBD>0<EFBFBD>0<EFBFBD>0R<EFBFBD>f
bool Development = false; // <EFBFBD><EFBFBD>zv<EFBFBD>0<EFBFBD>0<EFBFBD>0ON/OFF<EFBFBD>OnTesterkk0RFh<EFBFBD>:y0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<EFBFBD>:y <EFBFBD>
enum VM_Select{
All, // 0<EFBFBD>hQf0
LowMode, // 1<EFBFBD>NO<EFBFBD>0<EFBFBD>0
HighMode, // 2<EFBFBD>ؚ<EFBFBD>0<EFBFBD>0
};
VM_Select VolatilityMode = 0; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0R<EFBFBD>f_0:hQf0/1:NO<EFBFBD>0<EFBFBD>0/2:ؚ<EFBFBD>0<EFBFBD>0
bool Buy_Entry = true; // <EFBFBD><EFBFBD>D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
bool Sell_Entry = true; // <EFBFBD>X<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//+------------------------------------------------------------------+
//|<EFBFBD>O)R_j<EFBFBD><EFBFBD><EFBFBD>| |
//+------------------------------------------------------------------+
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>V<EFBFBD>[(u
string SYMBOL1 = "XAUUSD"; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 T<EFBFBD>-<EFBFBD>6<EFBFBD>eW[ <EFBFBD>
string SYMBOL2 = "GOLD"; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 T<EFBFBD>-<EFBFBD>4<EFBFBD>eW[ <EFBFBD>
ENUM_TIMEFRAMES Chart_TimeFrame = PERIOD_M5; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
// EAn0<EFBFBD>rKa YS(u
bool ChartWarning;
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<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
static bool check_duplicate = true;
static const string kEA_NAME = (string)MagicNumber;
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>,n(u
double MeasureSpread, SpreadAve = 0;
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(u
double Adjustspread = 5.0; // s^GW<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>R<EFBFBD>{(u<EFBFBD>[<EFBFBD>
double AllowMaxSpread = 8.0; // <EFBFBD><EFBFBD><EFBFBD>Rg'Y1<EFBFBD><EFBFBD>[<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
double Adjustspread_Margin = 3.0; // <EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>teE^
double Adjustspread_Margin1 = 2.0; // <EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>teE^<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bf<EFBFBD><EFBFBD>/^ <EFBFBD>
// <<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
int aCmd = 0;
// DPI<EFBFBD>c<EFBFBD>{
double DPIAdjust;
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bf<EFBFBD><EFBFBD><EFBFBD>,n
uint StartingTimestampBT;
// T<EFBFBD>,n(u<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
int err, fp;
string filename;
double OSpread, CSpread;
uint StartOrderTimestamp, OrderCloseTimestamp, StartingTimestamp;
double Order_Price, Close_Price;
uint OpenLatency, CloseLatency;
string Timeframe = (Period() == PERIOD_M1? "M1": Period() == PERIOD_M5? "M5": Period() == PERIOD_M15? "M15":
Period() == PERIOD_M30? "M30": Period() == PERIOD_H1? "H1": Period() == PERIOD_H4? "H4":
Period() == PERIOD_D1? "D1": Period() == PERIOD_W1? "W1": "MN1");
string Open_Type, Close_Type;
bool WritingTPSL = false;
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0e\tkh<EFBFBD>:y(u
double totalpips = 0, ProfitFactor = 0;
double plus_profit = 0, minus_profit = 0;
double minus_count = 0, plus_count = 0;
double RRR, WinPer;
double TradeCounts;
//+------------------------------------------------------------------+
//|<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(u<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|qQ<EFBFBD> |
//+------------------------------------------------------------------+
double ATR_D14;
ENUM_TIMEFRAMES ATR_TF = PERIOD_D1;
int ATR_PERIOD = 14;
double ALim = 21.0; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>03\<EFBFBD>ATR15Low
int Gap_Pips = 1; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01|1,gMR<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>B}$Ph0<EFBFBD>s(W<EFBFBD>O<hn0<EFBFBD>]pips
bool PositionClose = false; // <EFBFBD>N<EFBFBD>Pzln<EFBFBD><EFBFBD><EFBFBD>D0<EFBFBD>X<EFBFBD>0qQ <EFBFBD>
bool Logic1_Time = false; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01Bf<EFBFBD><EFBFBD>/^
//+------------------------------------------------------------------+
//|NO<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 |
//+------------------------------------------------------------------+
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0zln<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0T Ype
int WPR_Period1 = 42; // 0<EFBFBD><EFBFBD>D0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0%Rg<EFBFBD><EFBFBD>1
int WPR_Line1 = -97; // 0<EFBFBD><EFBFBD>D0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01
int WPR_Ex_Line1 = -100; // 0<EFBFBD><EFBFBD>D0\<EFBFBD>zln0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01
int RSI_Period1 = 8; // 0<EFBFBD><EFBFBD>D0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00RSIg<EFBFBD><EFBFBD>1
int RSI_Line1 = 72; // 0<EFBFBD><EFBFBD>D0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00RSI<EFBFBD>0<EFBFBD>0<EFBFBD>01
int RSI_Ex_Line1 = 68; // 0<EFBFBD><EFBFBD>D0\<EFBFBD>zln0RSI<EFBFBD>0<EFBFBD>0<EFBFBD>01
// zlnn0T Ype
int TakeProfit_pips1 = 50; // 0qQ<EFBFBD>\<EFBFBD>zln0)R<EFBFBD>xc$P<EFBFBD>Pips <EFBFBD>
int StopLoss_pips1 = 80; // 0qQ<EFBFBD>\<EFBFBD>zln0 dR<EFBFBD>c$P<EFBFBD>Pips <EFBFBD>
int ExTime1 = 9; // 0qQ<EFBFBD>\<EFBFBD>zln07_6RzlnBf;R1
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
ENUM_TIMEFRAMES MA_TF_buy1 = PERIOD_M5; // 0<EFBFBD><EFBFBD>D0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00MA<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01
int MA_Period_buy1 = 250; // 0<EFBFBD><EFBFBD>D0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00MAg<EFBFBD><EFBFBD>1
ENUM_TIMEFRAMES MA_TF_sell1 = PERIOD_M5; // 0<EFBFBD>X<EFBFBD>0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00MA<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01
int MA_Period_sell1 = 380; // 0<EFBFBD>X<EFBFBD>0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00MAg<EFBFBD><EFBFBD>1
ENUM_TIMEFRAMES SD_TF1 = PERIOD_D1; // 0qQ<EFBFBD>\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00SD<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01
int SD_Period1 = 15; // 0qQ<EFBFBD>\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00SDg<EFBFBD><EFBFBD>1
double SD_Value1 = 36.0; // 0qQ<EFBFBD>\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00SD$P1
//+------------------------------------------------------------------+
//|ؚ<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 |
//+------------------------------------------------------------------+
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0zln<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0T Ype
int WPR_Period2 = 14; // 0<EFBFBD><EFBFBD>D0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0%Rg<EFBFBD><EFBFBD>2
int WPR_Line2 = -97; // 0<EFBFBD><EFBFBD>D0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>02
int WPR_Ex_Line2 = -91; // 0<EFBFBD><EFBFBD>D0\<EFBFBD>zln0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>02
int RSI_Period2 = 7; // 0<EFBFBD><EFBFBD>D0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00RSIg<EFBFBD><EFBFBD>2
int RSI_Line2 = 73; // 0<EFBFBD><EFBFBD>D0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00RSI<EFBFBD>0<EFBFBD>0<EFBFBD>02
int RSI_Ex_Line2 = 69; // 0<EFBFBD><EFBFBD>D0\<EFBFBD>zln0RSI<EFBFBD>0<EFBFBD>0<EFBFBD>02
// zlnn0T Ype
int TakeProfit_pips2 = 200; // 0qQ<EFBFBD>\<EFBFBD>zln0)R<EFBFBD>xc$P<EFBFBD>Pips <EFBFBD>
int StopLoss_pips2 = 120; // 0qQ<EFBFBD>\<EFBFBD>zln0 dR<EFBFBD>c$P<EFBFBD>Pips <EFBFBD>
int ExTime2 = 3; // 0qQ<EFBFBD>\<EFBFBD>zln07_6RzlnBf;R2
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
ENUM_TIMEFRAMES MA_TF_buy2 = PERIOD_D1; // 0<EFBFBD><EFBFBD>D0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00MA<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>02
int MA_Period_buy2 = 170; // 0<EFBFBD><EFBFBD>D0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00MAg<EFBFBD><EFBFBD>2
ENUM_TIMEFRAMES MA_TF_sell2 = PERIOD_D1; // 0<EFBFBD>X<EFBFBD>0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00MA<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>02
int MA_Period_sell2 = 80; // 0<EFBFBD>X<EFBFBD>0\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00MAg<EFBFBD><EFBFBD>2
ENUM_TIMEFRAMES SD_TF2 = PERIOD_D1; // 0qQ<EFBFBD>\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00SD<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>02
int SD_Period2 = 20; // 0qQ<EFBFBD>\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00SDg<EFBFBD><EFBFBD>2
double SD_Value2 = 100.0; // 0qQ<EFBFBD>\<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00SD$P2
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| tester function |
//+------------------------------------------------------------------+
double OnTester()
{
// OnTesterk0h<EFBFBD>:y0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0\<EFBFBD><EFBFBD>R<EFBFBD>s0
if (Development)
{
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
return(NormalizeDouble(TesterStatistics(STAT_PROFIT) / TesterStatistics(STAT_EQUITY_DD), 2));
// <EFBFBD>R<EFBFBD>s
// return(NormalizeDouble(100*TesterStatistics(STAT_PROFIT_TRADES) / TesterStatistics(STAT_TRADES), 2));
}
return(0);
}
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bf<EFBFBD><EFBFBD><EFBFBD>,n
StartingTimestampBT = GetTickCount();
//+------------------------------------------------------------------+
// O(ugP<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>06R<EFBFBD>_
/*int demosv = StringFind(AccountServer(), "demo", 0); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 Tk0"demo"g0<z<EFBFBD>P
int Demosv = StringFind(AccountServer(), "Demo", 0); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 Tk0"Demo"g0<z<EFBFBD>P
int trialsv = StringFind(AccountServer(), "trial", 0); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 Tk0"trial"g0<z<EFBFBD>P
int practicesv = StringFind(AccountServer(), "practice", 0); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 Tk0"practice"g0<z<EFBFBD>P
if (TimeCurrent() > StrToTime(limitDate) && //gP<EFBFBD>R<EFBFBD>0
(!IsDemo() && demosv == -1 && Demosv == -1 && trialsv == -1 && practicesv == -1)
)
{
Alert(WindowExpertName() + " has expired or is not a demo account." + "\n"
+ "O(ugP<67>L0N<30>N0_0K00<>0<EFBFBD>0<EFBFBD>S<EFBFBD>^g0o0B0<42>0~0[0<>00");
return(INIT_FAILED);
}*/
//+------------------------------------------------------------------+
// <EFBFBD>S<EFBFBD>^ju<EFBFBD>S~<EFBFBD>0
/*if (IsTesting() == false)
{
if (!(AccountNumber() == validAccount1))// || AccountNumber() == validAccount2))
{
Alert("Not allowed account!" +"\n"+ "1<><31>SU0<55>0f0D0j0D0<44>S<EFBFBD>^g0Y00");
return(INIT_FAILED); // RgSL01YWeW0_0<EFBFBD>N<EFBFBD>0ԏW00EA<EFBFBD>0B}<EFBFBD>NU0[0<EFBFBD>0
}
}*/
//+------------------------------------------------------------------+
// GMT0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>ybk<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>R<EFBFBD><EFBFBD>te(u<EFBFBD>[<EFBFBD>
string BrokerName0 = "Ava Trad"; // Ava "Ava Trade Ltd.";
string BrokerName1 = "Exness T"; // Exness "Exness Technologies Ltd";
/*string BrokerName2 = "HF Marke"; // HFM "HF Markets (SV) Ltd.";"HF Markets(SV)Ltd.";
string BrokerName3 = "Tradexfi"; // XM "Tradexfin Limited";
string BrokerName4 = "FinTrade"; // XM "FinTrade Limited";
string BrokerName5 = "NOTESCO "; // IronFX "NOTESCO Ltd";
*/
//+------------------------------------------------------------------+
// GMT0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<z<EFBFBD>P<EFBFBD>ybk
if(StringSubstr(AccountCompany(), 0, 8) == BrokerName0
|| StringSubstr(AccountCompany(), 0, 8) == BrokerName1
)
{
Alert(
WindowExpertName() + " cannot run on brokers at GMT0"
+ "\n"
+ "GMT0n0<6E>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0o0<z<>Pg0M0~0[0<>0"
);
return(INIT_FAILED);
}
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>R<EFBFBD><EFBFBD>te
/*if (StringSubstr(AccountCompany(), 0, 8) == BrokerName1)
{
Summertime = 0;
}
else if (StringSubstr(AccountCompany(), 0, 8) == BrokerName2
|| StringSubstr(AccountCompany(), 0, 8) == BrokerName3
|| StringSubstr(AccountCompany(), 0, 8) == BrokerName4
|| StringSubstr(AccountCompany(), 0, 8) == BrokerName5
)
{
Summertime = 2;
}
else
{
Summertime = 1;
}*/
//+------------------------------------------------------------------+
// \pe<EFBFBD>p<EFBFBD>N Nn0Ahpek0<EFBFBD>_X0f0Pipsn0$P<EFBFBD>0<EFBFBD><EFBFBD>teY0<EFBFBD>0
xpoint = Point();
if(Digits() == 2 || Digits() == 5)
{
xpoint = xpoint * 10;
}
else
if(Digits() == 3)
{
xpoint = xpoint * 100;
}
//+------------------------------------------------------------------+
// DPI<EFBFBD>c<EFBFBD>{
double USERdpi = TerminalInfoInteger(TERMINAL_SCREEN_DPI);
double DevPCdpi = 144;
DPIAdjust = USERdpi / DevPCdpi;
//+------------------------------------------------------------------+
// g'YSL<EFBFBD>{<EFBFBD>Q<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>)Rn0<EFBFBD><EFBFBD>{g0O(u <EFBFBD>
TakeProfit_pips = MathMax(TakeProfit_pips1, TakeProfit_pips2);
StopLoss_pips = MathMax(StopLoss_pips1, StopLoss_pips2);
//+------------------------------------------------------------------+
// RgS<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bf~0_0o0Kb<EFBFBD>RBf0]0<EFBFBD>0<EFBFBD>NY<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>R <EFBFBD>
if (IsTesting() || AllowSpread != 0) MaxSpread_pips = AllowSpread;
if (AllowSpread == 0) MaxSpread_pips = AllowMaxSpread;
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>R Y<EFBFBD>f<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>rKah<EFBFBD>:y
if (!IsTesting())
{
ChartSet(); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>R Y<EFBFBD>f
CenterSymbol(); // -N.Yn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
ChartComment(); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
}
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0e\tk<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0h<EFBFBD>:y<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0pips <EFBFBD>
if (VisualHistory)
{
history();
PosHis();
}
//+------------------------------------------------------------------+
// <EFBFBD><EFBFBD>zv<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>XBfo0falsek0 <EFBFBD>
if (Development) HideTestIndicators(false);// O(uW0f0D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<EFBFBD>:yY0<EFBFBD>0
else HideTestIndicators(true);// O(uW0f0D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0^<EFBFBD>h<EFBFBD>:yk0Y0<EFBFBD>0
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<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
if (check_duplicate)
{
double term_global_var;
if (GlobalVariableGet(kEA_NAME, term_global_var))
{
Alert(
WindowExpertName() + " may have duplicate magic numbers. If all is well, press OK to continue with the setup"
+ "\n"
+ "<00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><07>n0<6E>S<EFBFBD><53>'`L0B0<42>0~0Y00OUL<55>L0!qQ0<51>0p00OK<00>0<EFBFBD>bW0f0-<2D><>[<5B>0<EFBFBD>}<7D>}W0f0O0`0U0D00"
);
}
const datetime mutex_time = GlobalVariableSet(kEA_NAME, 1.0);
if (mutex_time == 0)
{
const int errcode = GetLastError();
Print("GlobalVariableSet: ERRCODE[", errcode, "]:", ErrorDescription(errcode));
}
}
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>Q<EFBFBD>RRgS<EFBFBD>Qt
if (Recording) FileInit();
//+------------------------------------------------------------------+
return(0);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0͑<EFBFBD>(u
if(check_duplicate)
{
if(!GlobalVariableDel(kEA_NAME))
{
const int errcode = GetLastError();
Print("GlobalVariableDel: ERRCODE[", errcode, "]:", ErrorDescription(errcode));
}
}
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0JRd<EFBFBD><EFBFBD><EFBFBD>#<EFBFBD>
if(!IsTesting())
{
ObjectsDeleteAll();
ChartSetInteger(0,CHART_COLOR_CHART_UP,clrLime);
ChartSetInteger(0,CHART_COLOR_CHART_DOWN,clrLime);
ChartSetInteger(0,CHART_COLOR_CHART_LINE,clrLime);
Comment("");
}
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bf<EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<EFBFBD>0<EFBFBD>Q<EFBFBD>R
if(IsTesting())
{
uint EndingTimestamp = GetTickCount(); //<EFBFBD>Y<EFBFBD>RBf<EFBFBD><EFBFBD>
uint BT_Time = EndingTimestamp - StartingTimestampBT;
uint msec_unit = BT_Time % 1000;
datetime temp_date = BT_Time / 1000;
Print("<00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bf<42><66>= ",
TimeHour(temp_date), "hour ",
TimeMinute(temp_date), "min ",
TimeSeconds(temp_date), ".", msec_unit, "sec ",
" CQ<43>0<EFBFBD>0<EFBFBD>0= ", BT_Time);
}
//+------------------------------------------------------------------+
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
StartingTimestamp = GetTickCount(); //<EFBFBD>Y<EFBFBD>RBf<EFBFBD><EFBFBD>
//+------------------------------------------------------------------+
// <EFBFBD>l<EFBFBD>e6R<EFBFBD>_
if(Volume[0] <= 10)
{
LogicTime(); // Bf<EFBFBD><EFBFBD>6R<EFBFBD>_
PositionClose(); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
}
if(Logic1_Time && Volume[0] <= 5)
{
PositionOpen(); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
}
if(Volume[0] == 21)
{
SetTPSL(); // TP, SLn0<EFBFBD>Q-<EFBFBD><EFBFBD>[
}
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>R Y<EFBFBD>f<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>rKah<EFBFBD>:y
if (!IsTesting())
{
CenterSymbol(); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>`1X
ChartComment(); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
}
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0$P<EFBFBD>S<EFBFBD>_
if (!IsTesting() && AllowSpread == 0)
{
MeasureSpread = MarketInfo(Symbol(),MODE_SPREAD) / 10;
MeasureSP();
}
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>}h0pipsh<EFBFBD>:y
if (VisualHistory) TradeLinePips();
//+------------------------------------------------------------------+
// zlnL0TP/SLj0<EFBFBD>0<EFBFBD>`1X<EFBFBD>S<EFBFBD>_
if (Recording && !WritingTPSL) ClosedTradeTPSL();
//+------------------------------------------------------------------+
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| ܈ck<EFBFBD><EFBFBD>pe |
//+------------------------------------------------------------------+
void LogicTime()
{
xxTime = Hour(); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bf<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>{j0W0 <EFBFBD>
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0OKBf<EFBFBD><EFBFBD>
if (xxTime == 1 || xxTime >= 22)
{
Logic1_Time = true;
}
else
{
Logic1_Time = false;
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 |
//+------------------------------------------------------------------+
void PositionClose()
{
int i;
double profit;
bool res = false;
// @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;
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0K0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>,gpeL01,g*g<EFBFBD>nj0<EFBFBD>00for<EFBFBD>en0HQ-<EFBFBD>k0;b<EFBFBD>0 <EFBFBD>
int OrderOpenCandleCount = iBarShift(NULL, 0, OrderOpenTime());
if (OrderOpenCandleCount == 0) continue;
int spread = (int)MarketInfo(NULL, MODE_SPREAD);
if (OrderType() == OP_BUY)
{
profit = NormalizeDouble(Bid - OrderOpenPrice(), Digits); // <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 (
(Exit2(false) == 2 && spread <= (int)MaxSpread_pips*10)
|| (Exit2(false) == 2 && spread > (int)MaxSpread_pips*10 && profit > 0)
|| PositionClose
)
{
CSpread = MarketInfo(NULL, MODE_SPREAD); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>_
OrderCloseTimestamp = GetTickCount();// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>_
Close_Price = Bid; // zln<EFBFBD>X<EFBFBD>0<EFBFBD>l<EFBFBD>e<EFBFBD>0eQ<EFBFBD>0<EFBFBD>0<EFBFBD>O<h
res = OrderClose(OrderTicket(), OrderLots(), Bid, NULL, Green);
CloseLatency = GetTickCount() - OrderCloseTimestamp; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>_
}
}
if (OrderType() == OP_SELL)
{
profit = NormalizeDouble(OrderOpenPrice() - Ask, Digits); // <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 (
(Exit1(true) == 1 && spread <= (int)MaxSpread_pips*10)
|| (Exit1(true) == 1 && spread > (int)MaxSpread_pips*10 && profit > 0)
|| PositionClose
)
{
CSpread = MarketInfo(NULL, MODE_SPREAD); //<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>_
OrderCloseTimestamp = GetTickCount(); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>_
Close_Price = Ask; // zln<EFBFBD><EFBFBD>D0<EFBFBD>l<EFBFBD>e<EFBFBD>0eQ<EFBFBD>0<EFBFBD>0<EFBFBD>O<h
res = OrderClose(OrderTicket(), OrderLots(), Ask, NULL, Green);
CloseLatency = GetTickCount() - OrderCloseTimestamp; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>_
}
}
} // @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<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD>
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>f<EFBFBD><EFBFBD>
if (res && Recording)
{
for(int j=OrdersHistoryTotal()-1; j>=0; j--)
{
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)==false) // e\tk<EFBFBD>0x<EFBFBD><EFBFBD>b
{
Print("Access to history failed with error (",GetLastError(),")");
break;
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
CloseTradeInfo();
break; // 1<EFBFBD>0<EFBFBD>0Rg0<EFBFBD>f<EFBFBD><EFBFBD>B}<EFBFBD>Nn04XTo0for<EFBFBD>e<EFBFBD>0<EFBFBD>bQ0<EFBFBD>0
}
}
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 |
//+------------------------------------------------------------------+
void PositionOpen()
{
int i;
int ticket = -2; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Rg$P0-1o01YWeBfn0ju<EFBFBD>Sn0_0<EFBFBD>00O<EFBFBD>0<EFBFBD>0j0D0-2g0RgS
int CountBuy = 0,CountSell = 0;
bool res;
// <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;
}
aCmd = OrderType();
} // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0pe<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD>
// <<EFBFBD><EFBFBD> N<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01<EFBFBD><EFBFBD>S<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
if (EquityCheck())
{
VolatilityCheck(); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
// <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(true) == 1 // <EFBFBD><EFBFBD>D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
&& CountSell == 0
&& CountBuy < Maxposition
&& Buy_Entry
&& xxBars != Bars
&& Exit2(false) != 2 // <EFBFBD><EFBFBD>D0zln<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0!qW0
)
{
OSpread = MarketInfo(NULL, MODE_SPREAD);// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>_
StartOrderTimestamp = GetTickCount();// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>_
Order_Price = Ask;// <EFBFBD><EFBFBD>D0<EFBFBD>l<EFBFBD>e<EFBFBD>0eQ<EFBFBD>0<EFBFBD>0<EFBFBD>O<h
ticket = OrderSend(Symbol(),
OP_BUY,
CalculateLots(MM_Risk, StopLoss_pips),
Ask,
Slippage,
Ask - StopLoss_pips * xpoint,
Ask + TakeProfit_pips * xpoint,
_Comment,
MagicNumber,
0,
Blue);
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L01YWeg0B0<EFBFBD>0p00TPSL<EFBFBD>0RrRW0f0<EFBFBD>l<EFBFBD>eY0<EFBFBD>0
if (ticket == -1)
{
ticket = OrderSend(Symbol(),
OP_BUY,
CalculateLots(MM_Risk, StopLoss_pips),
Ask,
Slippage,
0,
0,
_Comment,
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 = OrderModify(OrderTicket(),
OrderOpenPrice(),
OrderOpenPrice() - StopLoss_pips * xpoint,
OrderOpenPrice() + TakeProfit_pips * xpoint,
0,
MediumSeaGreen);
}
}
}
OpenLatency = GetTickCount() - StartOrderTimestamp; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>_
Open_Type = "Buy"; // ticket*gb<EFBFBD>zBfn0<EFBFBD>Q<EFBFBD>R(u
if (ticket != -1) xxBars = Bars;
}
else if (Entry(false) == 2 // <EFBFBD>X<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
&& CountBuy == 0
&& CountSell < Maxposition
&& Sell_Entry
&& xxBars != Bars
&& Exit1(true) != 1 // <EFBFBD>X<EFBFBD>0zln<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0!qW0
)
{
OSpread = MarketInfo(NULL, MODE_SPREAD);// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>_
StartOrderTimestamp = GetTickCount();// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>_
Order_Price = Bid;// <EFBFBD>X<EFBFBD>0<EFBFBD>l<EFBFBD>e<EFBFBD>0eQ<EFBFBD>0<EFBFBD>0<EFBFBD>O<h
ticket = OrderSend(Symbol(),
OP_SELL,
CalculateLots(MM_Risk, StopLoss_pips),
Bid,
Slippage,
Bid + StopLoss_pips * xpoint,
Bid - TakeProfit_pips * xpoint,
_Comment,
MagicNumber,
0,
Red);
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L01YWeg0B0<EFBFBD>0p00TPSL<EFBFBD>0RrRW0f0<EFBFBD>l<EFBFBD>eY0<EFBFBD>0
if (ticket == -1)
{
ticket = OrderSend(Symbol(),
OP_SELL,
CalculateLots(MM_Risk, StopLoss_pips),
Bid,
Slippage,
0,
0,
_Comment,
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 = OrderModify(OrderTicket(),
OrderOpenPrice(),
OrderOpenPrice() + StopLoss_pips * xpoint,
OrderOpenPrice() - TakeProfit_pips * xpoint,
0,
MediumSeaGreen);
}
}
}
OpenLatency = GetTickCount() - StartOrderTimestamp; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD>_
Open_Type = "Sell"; // ticket*gb<EFBFBD>zBfn0<EFBFBD>Q<EFBFBD>R(u
if (ticket != -1) xxBars = Bars;
}
}
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>f<EFBFBD><EFBFBD>
if (CountBuy + CountSell == 0) WritingTPSL = false; // TP/SL<EFBFBD>f<EFBFBD><EFBFBD>$R<EFBFBD>[(u
if (ticket != -2 && Recording)
{
if (!OrderSelect(ticket, SELECT_BY_TICKET)) OpenTradeInfo_false(); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0*gb<EFBFBD>zBfn0<EFBFBD>f<EFBFBD><EFBFBD>
if (OrderSelect(ticket, SELECT_BY_TICKET)) OpenTradeInfo(); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0b<EFBFBD>zBfn0<EFBFBD>f<EFBFBD><EFBFBD>
}
}
//+------------------------------------------------------------------+
bool EquityCheck()
{
// <<EFBFBD><EFBFBD> N<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01<EFBFBD><EFBFBD>S<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
double usedMoney = AccountEquity() - AccountFreeMarginCheck(Symbol(), aCmd, CalculateLots(MM_Risk, StopLoss_pips));
if (!(
(AccountStopoutMode() == 0 && usedMoney > 0.0 && (AccountEquity() / usedMoney) * 100 <= AccountStopoutLevel())
|| (AccountStopoutMode() == 0 && usedMoney > 0.0 && AccountFreeMarginCheck(Symbol(), aCmd, CalculateLots(MM_Risk, StopLoss_pips)) <= 0)
|| (AccountStopoutMode() == 1 && AccountFreeMarginCheck(Symbol(), aCmd, CalculateLots(MM_Risk, StopLoss_pips)) <= AccountStopoutLevel())
)
&& IsTradeAllowed() == true) // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01<EFBFBD><EFBFBD>S$R<EFBFBD>[
{
return(true);
}
else return(false);
}
//+------------------------------------------------------------------+
void VolatilityCheck()
{
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
ATR_D14 = iATR(NULL, ATR_TF, ATR_PERIOD, 1);
if(ATR_D14 < ALim)
{
TakeProfit_pips = TakeProfit_pips1;
StopLoss_pips = StopLoss_pips1;
}
else if(ATR_D14 >= ALim)
{
TakeProfit_pips = TakeProfit_pips2;
StopLoss_pips = StopLoss_pips2;
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| TakeProfit, StopLoss |
//+------------------------------------------------------------------+
void SetTPSL()
{
int i;
bool res;
// <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;
VolatilityCheck();// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
// <EFBFBD><EFBFBD>D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n04XT
if (OrderType() == OP_BUY)
{
// 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 = OrderModify(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)
{
// 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 = OrderModify(OrderTicket(),
OrderOpenPrice(),
OrderOpenPrice() + StopLoss_pips * xpoint,
OrderOpenPrice() - TakeProfit_pips * xpoint,
0,
MediumSeaGreen);
}
}
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>)R_j<EFBFBD><EFBFBD> |
//+------------------------------------------------------------------+
// <EFBFBD>)R_j<EFBFBD><EFBFBD>n0<EFBFBD>0<EFBFBD>0<EFBFBD>0pe<EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>0
double CalculateLots(double risk, // 1<EFBFBD><EFBFBD>[Y0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
int sl_pips) // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
{
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bfo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(un0<EFBFBD>)R_j<EFBFBD><EFBFBD><EFBFBD>0O(uY0<EFBFBD>0
if (IsTesting())
return(CalculateLots_forTest(risk, sl_pips));
else
return(CalculateLots_forReal(risk, sl_pips));
}
// <EFBFBD>)R_j<EFBFBD><EFBFBD>n0<EFBFBD>0<EFBFBD>0<EFBFBD>0pe<EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>0<EFBFBD><EFBFBD>[<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(u <EFBFBD>
double CalculateLots_forReal(double risk, // 1<EFBFBD><EFBFBD>[Y0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
int sl_pips) // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
{
double freemargin; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0YOpR<<EFBFBD><EFBFBD>
double balance; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>S<EFBFBD>^<EFBFBD>
double credit; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
double tickvalue; // 1<EFBFBD>0<EFBFBD>0<EFBFBD>01pipS__0<EFBFBD>0n0<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>vS_M<EFBFBD>
double lotstep; // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0pen0g\;R06RP<EFBFBD>
double maxlots; // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0g'Y<EFBFBD>0<EFBFBD>0<EFBFBD>0pe6RP<EFBFBD>
double minlots; // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0g\<EFBFBD>0<EFBFBD>0<EFBFBD>0pe6RP<EFBFBD>
double lotsize = Lots; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
freemargin = AccountFreeMargin();
balance = AccountBalance();
credit = AccountCredit();
tickvalue = MarketInfo(NULL, MODE_TICKVALUE);
lotstep = MarketInfo(NULL, MODE_LOTSTEP);
maxlots = MarketInfo(NULL, MODE_MAXLOT);
minlots = MarketInfo(NULL, MODE_MINLOT);
// <EFBFBD>)R_j<EFBFBD><EFBFBD><EFBFBD>0O<EFBFBD>0j0D04XT0LotsK0<EFBFBD>0<EFBFBD>OckU0<EFBFBD>0_0lotsize<EFBFBD>0ԏY0
int step = (int)MathAbs(MathLog10(MarketInfo(Symbol(), MODE_LOTSTEP)));
lotsize = NormalizeDouble(Lots, (int)step); //<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0g0<EFBFBD>Vhc<EFBFBD>NeQ
lotsize = MathMax(minlots, MathMin(maxlots, lotsize)); //g\<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>N Nj0<EFBFBD>0g\<EFBFBD>0<EFBFBD>0<EFBFBD>0k00g'Y<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>N
Nj0<EFBFBD>0g'Y<EFBFBD>0<EFBFBD>0<EFBFBD>0k0<EFBFBD>Ock
if (MM_ON == Fixed) return(lotsize);
// tickvalueo0pipsg0o0j0O0pointj0n0g00\pe<EFBFBD>p<EFBFBD>N Nn0Ahpek0<EFBFBD>_X0f0܈ckY0<EFBFBD>0
if (StringSubstr(Symbol(), 0, 6) == "XAUUSD" || StringSubstr(Symbol(), 0, 4) == "GOLD")
{
if (Digits() == 2)
tickvalue = tickvalue * 10;
else if (Digits() == 3)
tickvalue = tickvalue * 100;
}
else if (!(StringSubstr(Symbol(), 0, 6) == "XAUUSD" || StringSubstr(Symbol(), 0, 4) == "GOLD"))
{
if (Digits() == 3 || Digits() == 5)
tickvalue = tickvalue * 10;
}
// 1<EFBFBD><EFBFBD>[Y0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h0SLn0E^K0<EFBFBD>00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>00
if (MM_ON == FreeMargin) // YOpR<<EFBFBD><EFBFBD><EFBFBD>e_
{
lotsize = (freemargin * risk / 100.0) // 1<EFBFBD><EFBFBD>[Y0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 (YOpR<<EFBFBD><EFBFBD>bёn0risk%)
/ (sl_pips * tickvalue); // 1<EFBFBD>0<EFBFBD>0<EFBFBD>0g0SLk0K0K0c0_0Bfn0ёM<EFBFBD>
}
else if (MM_ON == Balance) // <EFBFBD><EFBFBD>e_
{
lotsize = ((balance + credit) * risk / 100.0) // 1<EFBFBD><EFBFBD>[Y0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 (YOpR<<EFBFBD><EFBFBD>bёn0risk%)
/ (sl_pips * tickvalue); // 1<EFBFBD>0<EFBFBD>0<EFBFBD>0g0SLk0K0K0c0_0Bfn0ёM<EFBFBD>
}
// <EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0pen0;R0k0T<EFBFBD>0[0f0<EFBFBD>0<EFBFBD>0<EFBFBD>0pe<EFBFBD>0<EFBFBD>Ock
lotsize = MathFloor(lotsize / lotstep) * lotstep;
// <EFBFBD>0<EFBFBD>0<EFBFBD>0n0g\<EFBFBD>0<EFBFBD>0<EFBFBD>0pe<EFBFBD>0g'Y<EFBFBD>0<EFBFBD>0<EFBFBD>0peg0܈ck<EFBFBD>0K0Q0<EFBFBD>0
lotsize = MathMax(lotsize, minlots);
lotsize = MathMin(lotsize, maxlots);
return(lotsize);
}
// <EFBFBD>)R_j<EFBFBD><EFBFBD>n0<EFBFBD>0<EFBFBD>0<EFBFBD>0pe<EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>0<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(u <EFBFBD>
double CalculateLots_forTest(double risk, // 1<EFBFBD><EFBFBD>[Y0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
int sl_pips) // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
{
double freemargin; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0YOpR<<EFBFBD><EFBFBD>
double balance; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>S<EFBFBD>^<EFBFBD>
double credit; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
double tickvalue; // 1<EFBFBD>0<EFBFBD>0<EFBFBD>01pipS__0<EFBFBD>0n0<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>vS_M<EFBFBD>
double lotstep; // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0pen0g\;R06RP<EFBFBD>
double maxlots; // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0g'Y<EFBFBD>0<EFBFBD>0<EFBFBD>0pe6RP<EFBFBD>
double minlots; // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0g\<EFBFBD>0<EFBFBD>0<EFBFBD>0pe6RP<EFBFBD>
double lotamount; // 1<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD><EFBFBD><EFBFBD>pe
double lotsize = Lots; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
double conv; // <EFBFBD>S<EFBFBD>^<EFBFBD><EFBFBD><EFBFBD>.z^<EFBFBD>k0<EFBFBD>0<EFBFBD>0܈ck<EFBFBD>Ope
freemargin = AccountFreeMargin();
balance = AccountBalance();
credit = AccountCredit();
tickvalue = MarketInfo(NULL, MODE_TICKVALUE);
lotstep = MarketInfo(NULL, MODE_LOTSTEP);
maxlots = MarketInfo(NULL, MODE_MAXLOT);
minlots = MarketInfo(NULL, MODE_MINLOT);
lotamount = MarketInfo(NULL, MODE_LOTSIZE);
// <EFBFBD>)R_j<EFBFBD><EFBFBD><EFBFBD>0O<EFBFBD>0j0D04XT0LotsK0<EFBFBD>0<EFBFBD>OckU0<EFBFBD>0_0lotsize<EFBFBD>0ԏY0
int step = (int)MathAbs(MathLog10(MarketInfo(Symbol(), MODE_LOTSTEP)));
lotsize = NormalizeDouble(Lots, step); //<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0g0<EFBFBD>Vhc<EFBFBD>NeQ
lotsize = MathMax(minlots, MathMin(maxlots, lotsize)); //g\<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>N Nj0<EFBFBD>0g\<EFBFBD>0<EFBFBD>0<EFBFBD>0k00g'Y<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>N
Nj0<EFBFBD>0g'Y<EFBFBD>0<EFBFBD>0<EFBFBD>0k0<EFBFBD>Ock
if (MM_ON == Fixed) return(lotsize);
// 1N<EFBFBD><EFBFBD><EFBFBD>*1pips = $1 = 100<EFBFBD>Qh0<EFBFBD>N<EFBFBD>[W001<EFBFBD>0<EFBFBD>0<EFBFBD>01pipn0 Y<EFBFBD>RL0<EFBFBD>S<EFBFBD>^<EFBFBD><EFBFBD><EFBFBD>g0D0O0<EFBFBD>0k0<EFBFBD>vS_Y0<EFBFBD>0K0<EFBFBD><EFBFBD>{
// 1 lot = 10N<EFBFBD><EFBFBD><EFBFBD>
// <EFBFBD>S<EFBFBD>^<EFBFBD><EFBFBD><EFBFBD> = JPY : tickvalue = 1000<EFBFBD>Q/(lot<EFBFBD>0pip)
// <EFBFBD>S<EFBFBD>^<EFBFBD><EFBFBD><EFBFBD> = USD : tickvalue = $10/(lot<EFBFBD>0pip)
if (StringSubstr(Symbol(), 0, 6) == "XAUUSD" || StringSubstr(Symbol(), 0, 4) == "GOLD")
{
conv = 1000;
if (AccountCurrency() == "JPY")
conv = 100000;
tickvalue = lotamount / 10000 * conv;
}
else if (!(StringSubstr(Symbol(), 0, 6) == "XAUUSD" || StringSubstr(Symbol(), 0, 4) == "GOLD"))
{
conv = 1;
if (AccountCurrency() == "JPY")
conv = 100;
tickvalue = lotamount / 10000 * conv;
}
// 1<EFBFBD><EFBFBD>[Y0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h0SLn0E^K0<EFBFBD>00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>{Y0<EFBFBD>00
if (MM_ON == FreeMargin) // YOpR<<EFBFBD><EFBFBD><EFBFBD>e_
{
lotsize = (freemargin * risk / 100.0) // 1<EFBFBD><EFBFBD>[Y0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 (YOpR<<EFBFBD><EFBFBD>bёn0risk%)
/ (sl_pips * tickvalue); // 1<EFBFBD>0<EFBFBD>0<EFBFBD>0g0SLk0K0K0c0_0Bfn0ёM<EFBFBD>
}
else if (MM_ON == Balance) // <EFBFBD><EFBFBD>e_
{
lotsize = ((balance + credit) * risk / 100.0) // 1<EFBFBD><EFBFBD>[Y0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 (YOpR<<EFBFBD><EFBFBD>bёn0risk%)
/ (sl_pips * tickvalue); // 1<EFBFBD>0<EFBFBD>0<EFBFBD>0g0SLk0K0K0c0_0Bfn0ёM<EFBFBD>
}
// <EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0pen0;R0k0T<EFBFBD>0[0f0<EFBFBD>0<EFBFBD>0<EFBFBD>0pe<EFBFBD>0<EFBFBD>Ock
lotsize = MathFloor(lotsize / lotstep) * lotstep;
// <EFBFBD>0<EFBFBD>0<EFBFBD>0n0g\<EFBFBD>0<EFBFBD>0<EFBFBD>0pe<EFBFBD>0g'Y<EFBFBD>0<EFBFBD>0<EFBFBD>0peg0܈ck<EFBFBD>0K0Q0<EFBFBD>0
lotsize = MathMax(lotsize, minlots);
lotsize = MathMin(lotsize, maxlots);
return(lotsize);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>}<EFBFBD>b |
//+------------------------------------------------------------------+
int Entry(bool isbuy)
{
if (Entry_Rule1(isbuy) == 1 && (Entry_Filter1(isbuy) == 1 || Entry_Filter1(isbuy) == 3)
&& (Entry_Filter2(isbuy) == 1 || Entry_Filter2(isbuy) == 3)
&& (Entry_Filter3(isbuy) == 1 || Entry_Filter3(isbuy) == 3)
&& (Entry_Filter4(isbuy) == 1 || Entry_Filter4(isbuy) == 3)
)
{
return(1);
}
else if (Entry_Rule1(isbuy) == 2 && (Entry_Filter1(isbuy) == 2 || Entry_Filter1(isbuy) == 3)
&& (Entry_Filter2(isbuy) == 2 || Entry_Filter2(isbuy) == 3)
&& (Entry_Filter3(isbuy) == 2 || Entry_Filter3(isbuy) == 3)
&& (Entry_Filter4(isbuy) == 2 || Entry_Filter4(isbuy) == 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(bool isbuy)
{
if (Exit_Rule1(isbuy) == 3 && Exit_Rule2(isbuy) == 3 && Exit_Rule3(isbuy) == 3)
{
return(0);
}
else if (Exit_Rule1(isbuy) == 1)
{
return(1);
}
else if (Exit_Rule2(isbuy) == 1)
{
return(1);
}
else if (Exit_Rule3(isbuy) == 1)
{
return(1);
}
else
{
return(0);
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD><EFBFBD>D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0zln<EFBFBD>}<EFBFBD>b |
//+------------------------------------------------------------------+
int Exit2(bool isbuy)
{
if (Exit_Rule1(isbuy) == 3 && Exit_Rule2(isbuy) == 3 && Exit_Rule3(isbuy) == 3)
{
return(0);
}
else if (Exit_Rule1(isbuy) == 2)
{
return(2);
}
else if (Exit_Rule2(isbuy) == 2)
{
return(2);
}
else if (Exit_Rule3(isbuy) == 2)
{
return(2);
}
else
{
return(0);
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01 |
//+------------------------------------------------------------------+
int Entry_Rule1(bool isbuy)
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01
//RSIL0c<EFBFBD>[$P<EFBFBD>N Nk0j0c0_0<EFBFBD>0 0<EFBFBD><EFBFBD>D0 00c<EFBFBD>[$P<EFBFBD>N
Nk0j0c0_0<EFBFBD>0 0<EFBFBD>X<EFBFBD>0 0
//K0d001,gMRh02,gMRn0RSI$P<EFBFBD>]L0c<EFBFBD>[<EFBFBD>{<EFBFBD>V<EFBFBD>N<EFBFBD>Qj0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S<EFBFBD><EFBFBD>O<h Y<EFBFBD>Rn0<EFBFBD><EFBFBD>^6R<EFBFBD>_ <EFBFBD>
double RSI1 = iRSI(NULL, PERIOD_M5, (ATR_D14 < ALim? RSI_Period1 : RSI_Period2), PRICE_CLOSE, 1);
double RSI2 = iRSI(NULL, PERIOD_M5, (ATR_D14 < ALim? RSI_Period1 : RSI_Period2), PRICE_CLOSE, 2);
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0%RL0c<EFBFBD>[$P<EFBFBD>N Nk0D0<EFBFBD>0<EFBFBD><EFBFBD>o0 0<EFBFBD><EFBFBD>D0 00c<EFBFBD>[$P<EFBFBD>N
Nk0D0<EFBFBD>0<EFBFBD><EFBFBD>o0 0<EFBFBD>X<EFBFBD>0 0
double WPR1 = iWPR(NULL, PERIOD_M5, (ATR_D14 < ALim? WPR_Period1 : WPR_Period2), 1);
double WPR2 = iWPR(NULL, PERIOD_M5, (ATR_D14 < ALim? WPR_Period1 : WPR_Period2), 2);
if(isbuy &&
( RSI1 <= 100 - (ATR_D14 < ALim? RSI_Line1 : RSI_Line2)
|| WPR1 <= (ATR_D14 < ALim? WPR_Line1 : WPR_Line2))
)
{
return(1);
} // <EFBFBD><EFBFBD>D0
if(!isbuy &&
( RSI1 >= (ATR_D14 < ALim? RSI_Line1 : RSI_Line2)
|| WPR1 >= -100 - (ATR_D14 < ALim? WPR_Line1 : WPR_Line2))
)
{
return(2);
} // <EFBFBD>X<EFBFBD>0
return(0);
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>Qegj0D0
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01 |
//+------------------------------------------------------------------+
int Entry_Filter1(bool isbuy)
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
double spread = MarketInfo(NULL, MODE_SPREAD);
if(StringSubstr(Symbol(), 0, 6) == "XAUUSD" || StringSubstr(Symbol(), 0, 4) == "GOLD") // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0AhT<EFBFBD>0[0
{
if(Digits() == 2)
spread /= 10.0;
else
if(Digits() == 3)
spread /= 100.0;
}
else
if(!(StringSubstr(Symbol(), 0, 6) == "XAUUSD" || StringSubstr(Symbol(), 0, 4) == "GOLD")) // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>NYAhT<EFBFBD>0[0
{
if(Digits == 3 || Digits == 5)
spread /= 10.0;
}
if(spread > MaxSpread_pips)
return(0);
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
// (<EFBFBD>s(W<EFBFBD>O<h-1,g<EFBFBD><EFBFBD>B}$P)L00c<EFBFBD>[pips<EFBFBD>N
N`0c0_0<EFBFBD>0<EFBFBD><EFBFBD>D0<EFBFBD>ybk<EFBFBD><EFBFBD>X<EFBFBD>0o0<EFBFBD> <EFBFBD>
if(isbuy && Close[0] - Close[1] >= Gap_Pips * xpoint)
return(0);
if(!isbuy && Close[1] - Close[0] >= Gap_Pips * xpoint)
return(0);
//t^+gt^<EFBFBD>Y<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//12/20~1/3~0g0o0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0W0j0D0
int NGMonth = Month();
int NGDay = Day();
if(YearendClose
&& ((NGMonth == 12 && NGDay >= 20) || (NGMonth == 1 && NGDay <= 3))
)
{
return(0);
} // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>Qegj0D0
//3 P<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>e<EFBFBD>f<EFBFBD>0<EFBFBD>vMR<EFBFBD><EFBFBD>D0<EFBFBD>ybk
if(isbuy && TimeDayOfWeek(TimeCurrent()) == 3 && TimeHour(TimeCurrent()) >= 22)
{
return(0);
}
//1<EFBFBD>+g1<EFBFBD><EFBFBD>Y\Pbk
if((xxTime >= 22 && TimeDayOfWeek(TimeCurrent()) >= 5)
||
(xxTime <= 1 && TimeDayOfWeek(TimeCurrent()) == 1)
)
{
return(0);
}
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>01<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
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(bool isbuy)
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>02
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0\<EFBFBD>ATRL0<EFBFBD>W<EFBFBD>n$P<EFBFBD>0<EFBFBD><EFBFBD>H0_0<EFBFBD>00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>ybk
if(VolatilityMode == 1)
{
if(ATR_D14 >= ALim)
return(0);
}
if(VolatilityMode == 2)
{
if(ATR_D14 < ALim)
return(0);
}
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>02<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
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(bool isbuy)
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>03
// MA<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
// c<EFBFBD>[MA<EFBFBD>0<EFBFBD>0 Nj0<EFBFBD>0<EFBFBD><EFBFBD>D0 N<EFBFBD>S0
Nj0<EFBFBD>0<EFBFBD>X<EFBFBD>0 N<EFBFBD>S
double MA11_buy = iMA(NULL, (ATR_D14 < ALim? MA_TF_buy1 : MA_TF_buy2), (ATR_D14 < ALim? MA_Period_buy1 : MA_Period_buy2), 0, MODE_SMA, PRICE_CLOSE, 1);
double MA12_buy = iMA(NULL, (ATR_D14 < ALim? MA_TF_buy1 : MA_TF_buy2), (ATR_D14 < ALim? MA_Period_buy1 : MA_Period_buy2), 0, MODE_SMA, PRICE_CLOSE, 2);
double MA11_sell = iMA(NULL, (ATR_D14 < ALim? MA_TF_sell1 : MA_TF_sell2), (ATR_D14 < ALim? MA_Period_sell1 : MA_Period_sell2), 0, MODE_SMA, PRICE_CLOSE, 1);
double MA12_sell = iMA(NULL, (ATR_D14 < ALim? MA_TF_sell1 : MA_TF_sell2), (ATR_D14 < ALim? MA_Period_sell1 : MA_Period_sell2), 0, MODE_SMA, PRICE_CLOSE, 2);
if(isbuy && Close[1] < MA11_buy)
{
return(0);
} // <EFBFBD><EFBFBD>D0<EFBFBD>ybk
if(!isbuy && Close[1] > MA11_sell)
{
return(0);
} // <EFBFBD>X<EFBFBD>0<EFBFBD>ybk
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>03<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
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(bool isbuy)
{
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>04
// SDn0$PL0N<EFBFBD>[<EFBFBD>N
Nj0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>ybk
double StdDev_buy1 = iStdDev(NULL, (ATR_D14 < ALim? SD_TF1 : SD_TF2), (ATR_D14 < ALim? SD_Period1 : SD_Period2), 0, MODE_SMA, PRICE_CLOSE, 1);
if(StdDev_buy1 >= (ATR_D14 < ALim? SD_Value1 : SD_Value2)) return(0);
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>04<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| zln<EFBFBD>0<EFBFBD>0<EFBFBD>01 |
//+------------------------------------------------------------------+
int Exit_Rule1(bool isbuy)
{
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>01
//WPRL0c<EFBFBD>[$P<EFBFBD>N
Nk0j0c0_0<EFBFBD>0 0<EFBFBD><EFBFBD>D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0zln 00c<EFBFBD>[$P<EFBFBD>N Nk0j0c0_0<EFBFBD>0 0<EFBFBD>X<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0zln 0
double WPR1 = iWPR(NULL, PERIOD_M5, (ATR_D14 < ALim? WPR_Period1 : WPR_Period2), 1);
// WPRL0c<EFBFBD>[<EFBFBD>N
Nk0j0c0_0<EFBFBD>0<EFBFBD><EFBFBD>D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0zln
if(WPR1 >= - 100 - (ATR_D14 < ALim? WPR_Ex_Line1 : WPR_Ex_Line2))
{
return(2);
}
else
if(WPR1 <= (ATR_D14 < ALim? WPR_Ex_Line1 : WPR_Ex_Line2))
{
return(1);
}
else
{
return(0);
}
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>01<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| zln<EFBFBD>0<EFBFBD>0<EFBFBD>02 |
//+------------------------------------------------------------------+
int Exit_Rule2(bool isbuy)
{
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>02
//RSIL0c<EFBFBD>[$P<EFBFBD>N
Nk0j0c0_0<EFBFBD>0 0<EFBFBD><EFBFBD>D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0zln 00c<EFBFBD>[$P<EFBFBD>N Nk0j0c0_0<EFBFBD>0 0<EFBFBD>X<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0zln 0
double RSI1 = iRSI(NULL, PERIOD_M5, (ATR_D14 < ALim? RSI_Period1 : RSI_Period2), PRICE_CLOSE, 1);
// RSIL0c<EFBFBD>[<EFBFBD>N
Nk0j0c0_0<EFBFBD>0<EFBFBD><EFBFBD>D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0zln
if(RSI1 >= (ATR_D14 < ALim? RSI_Ex_Line1 : RSI_Ex_Line2))
{
return(2);
}
else
if(RSI1 <= 100 - (ATR_D14 < ALim? RSI_Ex_Line1 : RSI_Ex_Line2))
{
return(1);
}
else
{
return(0);
}
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>02<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| zln<EFBFBD>0<EFBFBD>0<EFBFBD>03 |
//+------------------------------------------------------------------+
int Exit_Rule3(bool isbuy)
{
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>03
// Bf<EFBFBD><EFBFBD>zln\<EFBFBD>c<EFBFBD>[Bf<EFBFBD>NM<EFBFBD>zln0<EFBFBD>N<EFBFBD>Pg0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD>S<EFBFBD><EFBFBD>Bf<EFBFBD><EFBFBD><EFBFBD>NMRg0zln
if(xxTime >= (ATR_D14 < ALim? ExTime1 : ExTime2) && xxTime < 22)
{
PositionClose = true;
}
else
{
PositionClose = false;
}
// zln<EFBFBD>0<EFBFBD>0<EFBFBD>03<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
return(3);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>0<EFBFBD>0<EFBFBD>0 |
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0RgS
void ChartSet()
{
// lM<EFBFBD>$P7_6Rh<EFBFBD>:y&<EFBFBD><EFBFBD><EFBFBD>RR<EFBFBD>f
int chartWidth = (int)ChartGetInteger(0, CHART_WIDTH_IN_PIXELS); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0E^n0<EFBFBD><EFBFBD>{
int textWidth = 200;//StringLen(WindowExpertName()) * 12; // <EFBFBD>V<EFBFBD>[$Ppx~0_0o0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0E^n0<EFBFBD><EFBFBD>{
double ShiftPer = textWidth * 100 / chartWidth;
if (!IsTesting())
{
if (StringSubstr(Symbol(), 0, 6) != SYMBOL1 || Period() != Chart_TimeFrame)
{
SymbolSelect(SYMBOL1 + StringSubstr(Symbol(), 6, StringLen(Symbol())), true);
ChartSetSymbolPeriod(0, SYMBOL1 + StringSubstr(Symbol(), 6, StringLen(Symbol())), Chart_TimeFrame);
}
// <EFBFBD>s(Wn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L04<EFBFBD>eW[n04XT0!qW0j0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
if (StringSubstr(Symbol(), 0, 4) != SYMBOL2 || Period() != Chart_TimeFrame)
{
SymbolSelect(SYMBOL2 + StringSubstr(Symbol(), StringSubstr(Symbol(), 0, 4) == SYMBOL2? 4 : 6, StringLen(Symbol())), true);
ChartSetSymbolPeriod(0, SYMBOL2 + StringSubstr(Symbol(), StringSubstr(Symbol(), 0, 4) == SYMBOL2? 4 : 6, StringLen(Symbol())), Chart_TimeFrame);
}
ChartSetInteger(0, CHART_COLOR_BACKGROUND, clrBlack);
ChartSetInteger(0, CHART_COLOR_FOREGROUND, clrWhite);
ChartSetInteger(0, CHART_COLOR_GRID, clrLightSlateGray);
ChartSetInteger(0, CHART_COLOR_CHART_UP, clrOlive);
ChartSetInteger(0, CHART_COLOR_CHART_DOWN, clrOlive);
ChartSetInteger(0, CHART_COLOR_CANDLE_BULL, clrBlack);
ChartSetInteger(0, CHART_COLOR_CANDLE_BEAR, clrBeige);
ChartSetInteger(0, CHART_COLOR_CHART_LINE, clrOlive);
ChartSetInteger(0, CHART_COLOR_VOLUME, clrOlive);
ChartSetInteger(0, CHART_COLOR_ASK, clrRed);
ChartSetInteger(0, CHART_COLOR_STOP_LEVEL, clrRed);
ChartSetInteger(0, CHART_SHIFT, true);
ChartSetDouble(0, CHART_SHIFT_SIZE, ShiftPer);
ChartSetInteger(0, CHART_AUTOSCROLL, true);
//ChartSetInteger(0, CHART_SHOW_DATE_SCALE, true); // S0<EFBFBD>0<EFBFBD>0eQ<EFBFBD>0<EFBFBD>0h0j0\0K0h<EFBFBD>:y<EFBFBD>{<EFBFBD>VL0<EFBFBD>rO0j0<EFBFBD>0
//ChartSetInteger(0, CHART_SHOW_PRICE_SCALE, true); // S0<EFBFBD>0<EFBFBD>0eQ<EFBFBD>0<EFBFBD>0h0j0\0K0h<EFBFBD>:y<EFBFBD>{<EFBFBD>VL0<EFBFBD>rO0j0<EFBFBD>0
ChartSetInteger(0, CHART_FOREGROUND, false);
ChartSetInteger(0, CHART_SHOW_GRID, false);
ChartSetInteger(0, CHART_SHOW_ONE_CLICK, false);
ChartSetInteger(0, CHART_SHOW_OHLC, false);
ChartSetInteger(0, CHART_SHOW_PERIOD_SEP, true);
ChartSetInteger(0, CHART_SHOW_ASK_LINE, true);
ChartSetInteger(0, CHART_SCALE, 3);
ChartSetInteger(0, CHART_MODE, CHART_CANDLES);
}
}
// <EFBFBD>rKak0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0M<EFBFBD>r<EFBFBD> Y<EFBFBD>f
void ChartSet2()
{
color ChartWar1 = ChartWarning? clrDarkGray : clrWhite;
color ChartWar2 = ChartWarning? clrDimGray : clrOlive;
color ChartWar3 = ChartWarning? clrSilver : clrBeige;
if (!IsTesting())
{
ChartSetInteger(0, CHART_COLOR_BACKGROUND, clrBlack);
ChartSetInteger(0, CHART_COLOR_FOREGROUND, ChartWar1);
ChartSetInteger(0, CHART_COLOR_GRID, clrLightSlateGray);
ChartSetInteger(0, CHART_COLOR_CHART_UP, ChartWar2);
ChartSetInteger(0, CHART_COLOR_CHART_DOWN, ChartWar2);
ChartSetInteger(0, CHART_COLOR_CANDLE_BULL, clrBlack);
ChartSetInteger(0, CHART_COLOR_CANDLE_BEAR, ChartWar3);
ChartSetInteger(0, CHART_COLOR_CHART_LINE, ChartWar2);
ChartSetInteger(0, CHART_COLOR_VOLUME, ChartWar2);
ChartSetInteger(0, CHART_COLOR_ASK, clrRed);
ChartSetInteger(0, CHART_COLOR_STOP_LEVEL, clrRed);
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0-N.Yk0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>c;uY0<EFBFBD>0 |
//+------------------------------------------------------------------+
void CenterSymbol()
{
string TEXT1 = StringSubstr(Symbol(), 0, 6);
string TEXT2 = (Period() == 1? "M1": Period() == PERIOD_M5? "M5": Period() == PERIOD_M15? "M15": Period() == PERIOD_M30? "M30":
Period() == PERIOD_H1? "H1": Period() == PERIOD_H4? "H4": Period() == PERIOD_D1? "D1": Period() == PERIOD_W1? "W1": "MN1")
+ "/" + DoubleToStr(MarketInfo(Symbol(),MODE_SPREAD) / 10, 1);
int FontSize = 36;
int chartWidth = (int)ChartGetInteger(0, CHART_WIDTH_IN_PIXELS);
int chartHeight = (int)ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS);
int textWidth = StringLen(TEXT1) * FontSize / 2; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0E^n0<EFBFBD><EFBFBD>{
int textHeight = FontSize; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0ؚU0
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0-N<EFBFBD>_K0<EFBFBD>0n0<EFBFBD>^j<EFBFBD>0<EFBFBD><EFBFBD>{
int x = (chartWidth - textWidth) / 2 + textWidth / 2;
int y = (chartHeight - textHeight) / 2 + textHeight / 2;
DrawTextInCenter("Symbol1", TEXT1, x, y - FontSize, FontSize, C'60, 60, 60');
DrawTextInCenter("Symbol2", TEXT2, x, y + FontSize, FontSize, C'60, 60, 60');
}
void DrawTextInCenter(string Symbolname, string label_text, int pos_x, int pos_y, int s, color clr= clrBlack)
{
ObjectCreate(Symbolname, OBJ_LABEL, 0, 0, 0);
ObjectSetString(0, Symbolname, OBJPROP_TEXT, label_text);
ObjectSetInteger(0, Symbolname, OBJPROP_FONTSIZE, s);
ObjectSetString(0, Symbolname, OBJPROP_FONT, "Segoe UI");
ObjectSetInteger(0, Symbolname, OBJPROP_XDISTANCE, pos_x);
ObjectSetInteger(0, Symbolname, OBJPROP_YDISTANCE, pos_y);
ObjectSetInteger(0, Symbolname, OBJPROP_COLOR, clr);
ObjectSetInteger(0, Symbolname, OBJPROP_BACK, true);
ObjectSetInteger(0, Symbolname, OBJPROP_SELECTABLE, false);
ObjectSetInteger(0, Symbolname, OBJPROP_ANCHOR, ANCHOR_CENTER);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<EFBFBD>:y |
//+------------------------------------------------------------------+
void ChartComment()
{
if (!IsTradeAllowed() || !IsConnected())
{
ChartWarning = true;
ChartSet2();
}
else
{
ChartWarning = false;
ChartSet2();
}
color clrChartWar = ChartWarning? clrNONE : clrWhite;
string LotsComment;
if (MM_ON == Fixed) LotsComment = DoubleToStr(Lots,2);
else LotsComment = DoubleToStr(CalculateLots(MM_Risk, StopLoss_pips),2) +
" (" + DoubleToStr(MM_Risk,1) +"%)";
string Comment0 = (string)MagicNumber + " [Magic]";
string Comment1 = LotsComment + " [Lots]";
string Comment2 = (MM_ON == 0 ? "Fixed" : MM_ON == 1 ? "FreeMargin" : "Balance") + " [MM]";
string Comment3 = DoubleToStr(MaxSpread_pips,1) + "/" + DoubleToStr(SpreadAve,1) + " [Spread Lim/Ave]";
string Comment4 = (string)Recording + " [Recording]";
string Comment5 = DoubleToStr(MarketInfo(Symbol(),MODE_SWAPLONG), 2) + "/" +
DoubleToStr(MarketInfo(Symbol(),MODE_SWAPSHORT), 2) + " [Swap B/S]";
string Comment6 = DoubleToStr(TakeProfit_pips, 0) + "/" + DoubleToStr(StopLoss_pips, 0) + " [Max TP/SL]";
int xpix1 = 14, xpix2 = 20;
CommentLabel("Comment0", Comment0, 4, 4+xpix2*1, 10, clrYellow);
CommentLabel("Comment1", Comment1, 4, 8+xpix2*2, 10, clrYellow);
CommentLabel("Comment2", Comment2, 4, xpix1+xpix2*3, 8, clrChartWar);
CommentLabel("Comment3", Comment3, 4, xpix1+xpix2*4, 8, clrChartWar);
CommentLabel("Comment4", Comment4, 4, xpix1+xpix2*5, 8, clrChartWar);
CommentLabel("Comment5", Comment5, 4, xpix1+xpix2*6, 8, clrChartWar);
CommentLabel("Comment6", Comment6, 4, xpix1+xpix2*7, 8, clrChartWar);
//+------------------------------------------------------------------+
// e\tkh<EFBFBD>:y(u
color clrVisualHistory = !VisualHistory? clrNONE : ChartWarning? clrNONE : clrWhite;
color clrVisualHistoryPP = !VisualHistory? clrNONE : ChartWarning? clrNONE : totalpips < 0? clrOrangeRed : clrWhite;
color clrVisualHistoryPF = !VisualHistory? clrNONE : ChartWarning? clrNONE : 0 < ProfitFactor && ProfitFactor < 1? clrOrangeRed : clrWhite;
string Comment8 = "------------------------------";
string Comment9 = DoubleToStr(TradeCounts, 0) + " [TradeCounts]";
string Comment10 = DoubleToStr(totalpips, 1) + " [Profit (pips)]";
string Comment11 = (plus_profit == 0 || minus_profit == 0? "--- [Profit factor]" :
DoubleToStr(ProfitFactor, 2) + " [Profit factor]");
string Comment12 = (plus_profit == 0 || minus_profit == 0? "---/--- [RRR/Win%]" :
DoubleToStr(RRR, 2) + "/" + DoubleToStr(WinPer, 1) + " [RRR/Win%]");
CommentLabel("Comment8", Comment8, 4, xpix1+xpix2*8, 8, clrVisualHistory);
CommentLabel("Comment9", Comment9, 4, xpix1+xpix2*9, 8, clrVisualHistory);
CommentLabel("Comment10", Comment10, 4, xpix1+xpix2*10, 8, clrVisualHistoryPP);
CommentLabel("Comment11", Comment11, 4, xpix1+xpix2*11, 8, clrVisualHistoryPF);
CommentLabel("Comment12", Comment12, 4, xpix1+xpix2*12, 8, clrVisualHistory);
}
//+------------------------------------------------------------------+
void CommentLabel(string ComName, string ComText, int ComPos_x, int ComPos_y, int ComSize, color ComClr= clrBlack)
{
ComPos_x = (int)NormalizeDouble(ComPos_x * DPIAdjust, 0); // %R<EFBFBD>DPI<EFBFBD>c<EFBFBD>{<EFBFBD>0<EFBFBD>0<EFBFBD>0g0<EFBFBD><EFBFBD>te
ComPos_y = (int)NormalizeDouble(ComPos_y * DPIAdjust, 0); // %R<EFBFBD>DPI<EFBFBD>c<EFBFBD>{<EFBFBD>0<EFBFBD>0<EFBFBD>0g0<EFBFBD><EFBFBD>te
ObjectCreate(ComName, OBJ_LABEL, 0, 0, 0);
ObjectSetString (0, ComName, OBJPROP_TEXT, ComText);
ObjectSetInteger(0, ComName, OBJPROP_XDISTANCE, ComPos_x);
ObjectSetInteger(0, ComName, OBJPROP_YDISTANCE, ComPos_y);
ObjectSetInteger(0, ComName, OBJPROP_FONTSIZE, ComSize);
ObjectSetInteger(0, ComName, OBJPROP_COLOR, ComClr);
ObjectSetString (0, ComName, OBJPROP_FONT, "Segoe UI");
ObjectSetInteger(0, ComName, OBJPROP_BACK, true);
ObjectSetInteger(0, ComName, OBJPROP_SELECTABLE, false);
ObjectSetInteger(0, ComName, OBJPROP_CORNER, CORNER_RIGHT_UPPER);
ObjectSetInteger(0, ComName, OBJPROP_ANCHOR, ANCHOR_RIGHT_UPPER);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0e\tkh<EFBFBD>:y |
//+------------------------------------------------------------------+
void TradeLinePips()
{
int sf = 0, tof = 0;
datetime hf = 0;
if (sf != Seconds() && OrdersTotal() > 0)
{
PosHis();
sf = Seconds();
}
if ((hf != iTime((string)0, PERIOD_H1, 0) && Seconds() > 30) || tof != OrdersHistoryTotal())
{
history();
hf = iTime((string)0, PERIOD_H1, 0);
tof = OrdersHistoryTotal();
}
}
//+------------------------------------------------------------------+
void PosHis()
{
int res;
double pips = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
res = OrderSelect(i, SELECT_BY_POS);
if (res == false) continue;
if (OrderSymbol() != Symbol() || OrderType() > 1 || OrderMagicNumber() != MagicNumber)
continue;
pips += trend((string)OrderTicket(), OrderOpenTime(), OrderOpenPrice(), Time[0], OrderType() == 0 ? Bid : Ask, OrderType());
}
}
//+------------------------------------------------------------------+
void history()
{
int res;
totalpips = 0;
plus_profit = 0;
minus_profit = 0;//, ProfitFactor = 0;
minus_count = 0;
plus_count = 0;
TradeCounts = 0;
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0e\tk<EFBFBD>0i"}
for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
{
res = OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (res == false) continue;
if (OrderSymbol() != Symbol() || OrderType() > 1 || OrderMagicNumber() != MagicNumber)
continue;
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0RRR<EFBFBD>0<EFBFBD>R<EFBFBD>s<EFBFBD><EFBFBD>{
if (OrderProfit() < 0)
{
minus_profit -= OrderProfit();
minus_count += 1;
}
else if (OrderProfit() >= 0)
{
plus_profit += OrderProfit();
plus_count += 1;
}
if (minus_profit != 0 && plus_count != 0 && minus_count != 0)
{
ProfitFactor = plus_profit / minus_profit;
RRR = (plus_profit / plus_count) / (minus_profit / minus_count);
WinPer = (plus_count * 100) / (plus_count + minus_count);
}
TradeCounts = minus_count + plus_count;
// T<EFBFBD>pips<EFBFBD><EFBFBD>{
totalpips += trend((string)TradeCounts, OrderOpenTime(), OrderOpenPrice(), OrderCloseTime(), OrderClosePrice(), OrderType());
}
}
//+------------------------------------------------------------------+
double trend(string obj_name, datetime Time1, double Close1, datetime Time2, double Close2, int type)
{
double tes = 0.0; // Y<EFBFBD>NQ0Kbpe<EFBFBD>e(PIPS<EFBFBD>c<EFBFBD>{)
double pips = (double)DoubleToStr((type == 0 ? Close2 - Close1 : Close1 - Close2) / Point() * 0.1 - tes, 1);
int Shift2 = iBarShift(NULL, 0, Time2);
datetime Timex = iTime(NULL, 0, Shift2 + 1);
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>}
ObjectDelete("TradeLine" + obj_name);
ObjectCreate(0, "TradeLine" + obj_name, OBJ_TREND, 0, Time1, Close1, Time2, Close2);
ObjectSetInteger(0, "TradeLine" + obj_name, OBJPROP_COLOR, type == 0 ? clrDodgerBlue : clrOrangeRed);
ObjectSetInteger(0, "TradeLine" + obj_name, OBJPROP_STYLE, 0);
ObjectSetInteger(0, "TradeLine" + obj_name, OBJPROP_WIDTH, 2);
ObjectSetInteger(0, "TradeLine" + obj_name, OBJPROP_SELECTABLE, false); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0x<EFBFBD><EFBFBD>b<EFBFBD>S&T-<EFBFBD><EFBFBD>[
ObjectSetInteger(0, "TradeLine" + obj_name, OBJPROP_RAY_RIGHT, false); // <EFBFBD>Sk0<EFBFBD>}<EFBFBD>0<EFBFBD>^w<EFBFBD>
// pipsh<EFBFBD>:y
ObjectDelete("TradePips" + obj_name);
ObjectCreate(0, "TradePips" + obj_name, OBJ_TEXT, 0, Timex, Close2);
ObjectSetInteger(0, "TradePips" + obj_name, OBJPROP_COLOR, pips < 0 ? clrOrangeRed : !IsTesting()? clrLime : clrYellow);//type == 0 ? BuyColor : SellColor);
ObjectSetInteger(0, "TradePips" + obj_name, OBJPROP_SELECTABLE, false); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0x<EFBFBD><EFBFBD>b<EFBFBD>S&T-<EFBFBD><EFBFBD>[
ObjectSetInteger(0, "TradePips" + obj_name, OBJPROP_FONTSIZE, 12); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
ObjectSetInteger(0, "TradePips" + obj_name, OBJPROP_ANCHOR, ANCHOR_RIGHT); // <EFBFBD>c;uMOn
ObjectSetString(0, "TradePips" + obj_name, OBJPROP_TEXT, DoubleToStr(pips, 1)); // h<EFBFBD>:yY0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
ObjectSetString(0, "TradePips" + obj_name, OBJPROP_FONT, "Segoe UI Semibold"); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
return(pips);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>,n<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 |
//+------------------------------------------------------------------+
void MeasureSP()
{
double SpreadMin = 1000, SpreadMax = 0, SpreadSum = 0;
double SpreadMin1 = 100, SpreadMax1 = 0, SpreadSum1 = 0, SpreadAve1 = 0;
int TickCount = 0, TickCount1 = 0, lastBars = 0;
TickCount++;
SpreadSum += MeasureSpread;
SpreadMin = SpreadMin == 0 ? SpreadMin = MeasureSpread : SpreadMin;
if(TickCount > 0 && SpreadSum > 0)
SpreadAve = SpreadSum / TickCount;
if(SpreadMax < MeasureSpread)
SpreadMax = MeasureSpread;
if(SpreadMin > MeasureSpread)
SpreadMin = MeasureSpread;
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bf<EFBFBD><EFBFBD>/^n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
if(Logic1_Time)
{
TickCount1++;
SpreadSum1 += MeasureSpread;
SpreadMin1 = SpreadMin1 == 0 ? SpreadMin1 = MeasureSpread : SpreadMin1;
if(TickCount1 > 0 && SpreadSum1 > 0)
SpreadAve1 = SpreadSum1 / TickCount1;
if(SpreadMax1 < MeasureSpread)
SpreadMax1 = MeasureSpread;
if(SpreadMin1 > MeasureSpread)
SpreadMin1 = MeasureSpread;
}
// g<EFBFBD><EFBFBD>n0<EFBFBD>0<EFBFBD>0<EFBFBD>f<EFBFBD>eBfk0/}Mz$P<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
if(lastBars != iBars(NULL, PERIOD_MN1))
{
lastBars = iBars(NULL, PERIOD_MN1);
SpreadSum = 0;
TickCount = 0;
SpreadSum1 = 0;
TickCount1 = 0;
}
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>{
Adjustspread = SpreadAve + Adjustspread_Margin; // s^GWk0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>R<EFBFBD>{
MaxSpread_pips = MathMin(Adjustspread, AllowMaxSpread); // <EFBFBD>Q<EFBFBD><EFBFBD>-<EFBFBD><EFBFBD>[n0g'Y$Ph0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>R<EFBFBD>{<EFBFBD>0<EFBFBD>k<EFBFBD>W0\U0D0<EFBFBD>e<EFBFBD>0<EFBFBD>c(u
if(SpreadAve1 != 0) // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bf<EFBFBD><EFBFBD>/^6R<EFBFBD>_(u
{
Adjustspread = SpreadAve1 + Adjustspread_Margin1; // s^GWk0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>R<EFBFBD>{
MaxSpread_pips = MathMax(MathMin(Adjustspread, AllowMaxSpread), MaxSpread_pips); // g'Y$Ph0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>R<EFBFBD>{0hQSOs^GW<EFBFBD>0<EFBFBD>k<EFBFBD>
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <EFBFBD>[L<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>[L<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>,n<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0\Ob |
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0RgS
int FileInit()
{
filename = AccountCompany() + "_" + (string)AccountNumber() + "_TradeLog.csv";// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 T<EFBFBD>0zl<EFBFBD>0<EFBFBD>0
fp = FileOpen(filename, FILE_READ|FILE_WRITE|FILE_CSV, ',');// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(csv)
if(fp==INVALID_HANDLE)
{
err = GetLastError();
printf("Error occured: [%d] %s", err, ErrorDescription(err));
return(0.0);
}
FileWrite(fp, "<00>l<EFBFBD>eju<6A>S", "<00>l<EFBFBD>eBf<42><66>", "Bf;R", "R", "<00>S_.z%R", "<00>l<EFBFBD>e<EFBFBD>O<h", "}<7D>[<5B>O<h",
"<00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(pips)", "<00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(pips)", "<00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(ms)",
" d<EFBFBD>v(pips)", "peϑ", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0", "Bf<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "EA T",
"<00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0", "<00><>zv1", "<00><>zv2");
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>X0<EFBFBD>0
FileClose(fp);
return(0);
}
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>`1X
void OpenTradeInfo_false()
{
Order_Price = (Open_Type == "Buy"? Ask : Bid); //NormalizeDouble(Order_Price , Digits); // <EFBFBD><EFBFBD>D0<EFBFBD>l<EFBFBD>e<EFBFBD>O<h<EFBFBD>0ck<EFBFBD><EFBFBD>S
double Open_Yakujyou_Price = GetLastError(); //NormalizeDouble(OrderOpenPrice(), Digits); // <EFBFBD>[<EFBFBD><EFBFBD>}<EFBFBD>[W0_0<EFBFBD>O<h0ck<EFBFBD><EFBFBD>S
double Open_Spread = OSpread / 10; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00AhT<EFBFBD>0[0
double Open_Slippage = (double)Volume[0]; //NormalizeDouble(MathAbs(Order_Price - Open_Yakujyou_Price), Digits) / xpoint; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00AhT<EFBFBD>0[0
uint Open_Runtime = StartOrderTimestamp - StartingTimestamp; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bf<EFBFBD><EFBFBD>
FileWriteingOpen_false(Open_Yakujyou_Price, Open_Spread, Open_Slippage, Open_Runtime); // <EFBFBD>fM0<EFBFBD><EFBFBD>0<EFBFBD>Qt
}
void OpenTradeInfo()
{
Order_Price = NormalizeDouble(Order_Price , Digits); // <EFBFBD><EFBFBD>D0<EFBFBD>l<EFBFBD>e<EFBFBD>O<h<EFBFBD>0ck<EFBFBD><EFBFBD>S
double Open_Yakujyou_Price = NormalizeDouble(OrderOpenPrice(), Digits); // <EFBFBD>[<EFBFBD><EFBFBD>}<EFBFBD>[W0_0<EFBFBD>O<h0ck<EFBFBD><EFBFBD>S
double Open_Spread = OSpread / 10; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00AhT<EFBFBD>0[0
double Open_Slippage = NormalizeDouble(MathAbs(Order_Price - Open_Yakujyou_Price), Digits) / xpoint; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00AhT<EFBFBD>0[0
Open_Type = OrderType() == OP_BUY? "Buy" : "Sell";
uint Open_Runtime = StartOrderTimestamp - StartingTimestamp; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bf<EFBFBD><EFBFBD>
FileWriteingOpen(Open_Yakujyou_Price, Open_Spread, Open_Slippage, Open_Runtime); // <EFBFBD>fM0<EFBFBD><EFBFBD>0<EFBFBD>Qt
}
void CloseTradeInfo()
{
Close_Price = NormalizeDouble(Close_Price, Digits); // <EFBFBD>X<EFBFBD>0<EFBFBD>l<EFBFBD>e<EFBFBD>O<h<EFBFBD>0ck<EFBFBD><EFBFBD>S
double Close_Yakujou_Price = NormalizeDouble(OrderClosePrice(), Digits); // <EFBFBD>[<EFBFBD><EFBFBD>}<EFBFBD>[W0_0<EFBFBD>O<h
double Close_Spread = CSpread / 10; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00AhT<EFBFBD>0[0
double Close_Slippage = NormalizeDouble(MathAbs(Close_Yakujou_Price - Close_Price), Digits) / xpoint; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00AhT<EFBFBD>0[0
double profitpips = NormalizeDouble(OrderType() == OP_BUY? (OrderClosePrice() - OrderOpenPrice()) / xpoint :
(OrderOpenPrice() - OrderClosePrice()) / xpoint, 1);
Close_Type = "Close";
uint Close_Runtime = OrderCloseTimestamp - StartingTimestamp; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bf<EFBFBD><EFBFBD>
FileWriteingClose(Close_Yakujou_Price, Close_Spread, Close_Slippage, profitpips, Close_Runtime); // <EFBFBD>fM0<EFBFBD><EFBFBD>0<EFBFBD>Qt
}
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>fM0<EFBFBD><EFBFBD>0
void FileWriteingOpen_false(double OYP, double OSp, double OSl, uint OR)
{
for(int i = 0; i < 3000; i++)
{
FileClose(fp); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0<EFBFBD><EFBFBD>M0c0q0j0W0g0<EFBFBD><EFBFBD>Q0j0D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>02<EFBFBD>P0
fp = FileOpen(filename, FILE_READ|FILE_WRITE|FILE_CSV, ',');// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(csv)01YWe;b<EFBFBD>0$Po0-1
if (fp != INVALID_HANDLE)
{
FileSeek(fp, 0, SEEK_END);
FileWrite(fp, "false", TimeCurrent(), TimeHour(TimeCurrent()), TimeMinute(TimeCurrent()),
Open_Type, Order_Price, OYP, OSp, "tick=" + (string)OSl, OpenLatency,
"---", CalculateLots(MM_Risk, StopLoss_pips), Symbol(), Timeframe, WindowExpertName(),
OrderMagicNumber(), i, OR);
FileClose(fp);
break;
}
}
if (fp == -1) Print("Error=", GetLastError(), " <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<6E>fM0<4D><30>0k01YWeW0~0W0_0");
}
void FileWriteingOpen(double OYP, double OSp, double OSl, uint OR)
{
for(int i = 0; i < 3000; i++)
{
FileClose(fp); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0<EFBFBD><EFBFBD>M0c0q0j0W0g0<EFBFBD><EFBFBD>Q0j0D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>02<EFBFBD>P0
fp = FileOpen(filename, FILE_READ|FILE_WRITE|FILE_CSV, ',');// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(csv)01YWe;b<EFBFBD>0$Po0-1
if (fp != INVALID_HANDLE)
{
FileSeek(fp, 0, SEEK_END);
FileWrite(fp, OrderTicket(), OrderOpenTime(), TimeHour(OrderOpenTime()), TimeMinute(OrderOpenTime()),
Open_Type, Order_Price, OYP, OSp, OSl, OpenLatency,
"---", CalculateLots(MM_Risk, StopLoss_pips), Symbol(), Timeframe, WindowExpertName(),
OrderMagicNumber(), i, OR);
FileClose(fp);
break;
}
}
if (fp == -1) Print("Error=", GetLastError(), " <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<6E>fM0<4D><30>0k01YWeW0~0W0_0");
}
void FileWriteingClose(double CYP, double CSp, double CSl, double pro, uint CR)
{
for(int i = 0; i < 3000; i++)
{
FileClose(fp); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0<EFBFBD><EFBFBD>M0c0q0j0W0g0<EFBFBD><EFBFBD>Q0j0D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>02<EFBFBD>P0
fp = FileOpen(filename, FILE_READ|FILE_WRITE|FILE_CSV, ',');// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(csv)01YWe;b<EFBFBD>0$Po0-1
if (fp != INVALID_HANDLE)
{
FileSeek(fp, 0, SEEK_END);
FileWrite(fp, OrderTicket(), OrderCloseTime(), TimeHour(OrderCloseTime()), TimeMinute(OrderCloseTime()),
Close_Type, Close_Price, CYP, CSp, CSl, CloseLatency,
pro, CalculateLots(MM_Risk, StopLoss_pips), Symbol(), Timeframe, WindowExpertName(),
OrderMagicNumber(), i, CR);
FileClose(fp);
break;
}
}
if (fp == -1) Print("Error=", GetLastError(), " <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<6E>fM0<4D><30>0k01YWeW0~0W0_0");
}
// TP/SLBfn0i<EFBFBD>Q
void ClosedTradeTPSL()
{
datetime OrderCloseTime_bak = 0;
for(int i=OrdersHistoryTotal()-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_HISTORY ) == 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;
// zlnBf<EFBFBD><EFBFBD>k0<EFBFBD>f<EFBFBD>eL0j0Q0<EFBFBD>0p0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>QtB}<EFBFBD>N
if((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderCloseTime() == OrderCloseTime_bak) break;
if((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderCloseTime() > OrderCloseTime_bak && !WritingTPSL) // zlnBf<EFBFBD><EFBFBD>L0g<EFBFBD>eg0B0<EFBFBD>0p0
{
OrderCloseTime_bak = OrderCloseTime();
int length = StringLen(OrderComment());//StringLeno0<EFBFBD>eW[pe<EFBFBD>0ԏY0
if (length >= 4)
{
// TP/SLzlnn0<EFBFBD>x<EFBFBD><EFBFBD>
string tpsl = StringSubstr(OrderComment(), length-4, 4);
if (tpsl == "[tp]" || tpsl == "[sl]")
{
Close_Price = NormalizeDouble((tpsl == "[tp]"? OrderTakeProfit() : OrderStopLoss()), Digits); // <EFBFBD>X<EFBFBD>0<EFBFBD>l<EFBFBD>e<EFBFBD>O<h<EFBFBD>0ck<EFBFBD><EFBFBD>S
double Close_Yakujou_Price = NormalizeDouble(OrderClosePrice(), Digits); // <EFBFBD>[<EFBFBD><EFBFBD>}<EFBFBD>[W0_0<EFBFBD>O<h
double Close_Spread = MarketInfo(NULL,MODE_SPREAD) / 10; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00AhT<EFBFBD>0[0
double Close_Slippage = NormalizeDouble(MathAbs(Close_Yakujou_Price - Close_Price), Digits) / xpoint; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00AhT<EFBFBD>0[0
CloseLatency = 0;
double profitpips = NormalizeDouble((OrderType() == OP_BUY? OrderClosePrice() - OrderOpenPrice() : OrderOpenPrice() - OrderClosePrice()) / xpoint, 1);
Close_Type = tpsl == "[tp]"? "TP" : "SL";
uint Close_Runtime = 0; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bf<EFBFBD><EFBFBD>
FileWriteingClose(Close_Yakujou_Price, Close_Spread, Close_Slippage, profitpips, Close_Runtime); // <EFBFBD>fM0<EFBFBD><EFBFBD>0<EFBFBD>Qt
WritingTPSL = true;
break;
}
}
}
}
}
//+------------------------------------------------------------------+