gryps2/EA-code/handy_systems/EXPERIMENTAL/HS-E-001-USER-FRIENDLY-EA/HS-E-001-USER-FRIENDLY-EA.mq4

1055 lines
91 KiB
MQL4
Raw Permalink Normal View History

2025-05-30 14:58:21 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| 001-USER-FRIENDLY-EA.mq4 |
//| Copyright (c) 2024, HANDY SYSTEMS with TNK, All rights reserved |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright (c) 2024, HANDY SYSTEMS with TNK, All rights reserved"
#property version "1.0"
#property strict
#include <stdlib.mqh>
// MM type
enum MM_Type
{
Fixed = 0, // Fixed
FreeMargin = 1, // FreeMargin
Barance = 2, // Balance
AddCredit = 3 // AddCredit
};
// SUMMERTIME type
enum SUMMERTIME_Type
{
none = 0, // none
US = 1, // US
UK = 2 // UK
};
input int MagicNumber = 12345; // MagicNumber
input double Lots = 0.1; // Lots
input double StopLoss_pips = 10000.0; // StopLoss (pips)
input double StopLoss_pips_buy = 10000.0; // StopLoss buy (pips)
input double StopLoss_pips_sell = 10000.0; // StopLoss sell (pips)
input double MaxStopLoss_pips = 10000.0; // MaxStopLoss (pips)
input MM_Type MM_ON = Fixed; // MM Type
input double MM_Risk = 0.1; // MM Risk
input SUMMERTIME_Type Summertime = none; // Summertime Type
//--------------------------------------------------------------------
// T-038_MagicChohukuAlert: <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<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
// S0<EFBFBD>0<EFBFBD>0<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>0`0EA T<EFBFBD>Xg0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0͑<EFBFBD>W0_04XT<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>QY0
static bool check_duplicate = true;
static const string kEA_NAME = (string)MagicNumber;
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// T-039_AutoChartSet: <EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//--------------------------------------------------------------------
//6Ahn0FX<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0j0<EFBFBD>0 Y<EFBFBD>c<EFBFBD>S0CFDj0i06<EFBFBD>eW[<EFBFBD>NYn0<EFBFBD>0n0o0i<EFBFBD>wW0j0D00
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>V<EFBFBD>[(u
string SYMBOL1 = "GBPJPY"; // <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>
int Chart_TimeFrame = PERIOD_M15; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// T-042_EA-Condition: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0EA<EFBFBD>rKah<EFBFBD>:y
//--------------------------------------------------------------------
// EAn0<EFBFBD>rKa<EFBFBD>0h<EFBFBD>:y<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
// EAn0<EFBFBD>rKa<EFBFBD>0h<EFBFBD>:y
bool Pass = true;
int CT = 0;
int ChartWarning; // S0n0 Ypeo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<EFBFBD>:y<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<EFBFBD>:yh0#<EFBFBD><EFBFBD>R
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// T-044_TradeHistry-pips: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0e\tk<EFBFBD>0pips<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0h<EFBFBD>:y
//--------------------------------------------------------------------
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0e\tkh<EFBFBD>:y<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<EFBFBD>:y(u
double tes = 0.0; // Y<EFBFBD>NQ0Kbpe<EFBFBD>e(PIPS<EFBFBD>c<EFBFBD>{)
int sf, tof;
datetime hf;
double totalpips = 0, ProfitFactor = 0;
double plus_profit = 0, minus_profit = 0;
double minus_count = 0, plus_count = 0;
double RRR, WinPer;
double TradeCounts;
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// T-045_AutoSpread: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//--------------------------------------------------------------------
double MaxSpread_pips = 4.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>
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>,n(u
double MeasureSpread, SpreadMin = 1000, SpreadMax = 0, SpreadSum = 0, SpreadAve = 0;
double SpreadMin1 = 100, SpreadMax1 = 0, SpreadSum1 = 0, SpreadAve1 = 0;
int TickCount = 0, TickCount1 = 0, lastBars;
// <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 = 2.0; // <EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>teE^
double Adjustspread_Margin1 = 1.0; // <EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>teE^<EFBFBD>1:00 <EFBFBD>
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// T-046_Slippage_Latency: <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>,n
//--------------------------------------------------------------------
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0%R0g0<EFBFBD>fM0<EFBFBD><EFBFBD>0<EFBFBD>TP/SL<EFBFBD>[<EFBFBD>_ <EFBFBD> |
//+------------------------------------------------------------------+
// T<EFBFBD>,n(u<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
input bool Measurement = true; // <EFBFBD>,n<EFBFBD>0<EFBFBD>0csv\Ob<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>0I{ <EFBFBD>
double xpoint = 0;
int err, fp;
string filename;
double OSpread, CSpread;
uint StartOrderTimestamp, OrderCloseTimestamp;
double Order_Price, Close_Price;
double Open_Yakujyou_Price, Close_Yakujou_Price;
double Open_Spread, Close_Spread;
double Open_Slippage, Close_Slippage;
uint OpenLatency, CloseLatency;
double profitpips;
string Timeframe = (Period() == 1? "M1": Period() == 5? "M5": Period() == 15? "M15": Period() == 30? "M30":
Period() == 60? "H1": Period() == 240? "H4": Period() == 1440? "D1": Period() == 10080? "W1": "MN1");
string Open_Type, Close_Type;
datetime OrderCloseTime_bak = 0, OrderOpenTime_bak = 0;
int V0;
// c$P<EFBFBD>c$P<EFBFBD>l<EFBFBD>eBf_[]<EFBFBD>Qo0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0pe+2<EFBFBD>
int k, open_type_Buy[12], open_type_Sell[12];
int Ticket_Buy[12], Ticket_Sell[12];
double Gapentry[12], GapentryBuy[12], GapentrySell[12];
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// T-049_VisualModeButton: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0ON/OFFR<EFBFBD>f<EFBFBD>0<EFBFBD>0<EFBFBD>0
//--------------------------------------------------------------------
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0R<EFBFBD>f<EFBFBD>0<EFBFBD>0<EFBFBD>0
bool VisualMode;
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// T-051_EquityCheck: <<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//--------------------------------------------------------------------
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 Ype
// <<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
int aCmd = 0;
//--------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//-----------------------------------------------------------------
// T-038_MagicChohukuAlert: <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<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("Magic numbers are duplicated" +"\n"+ "<00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><07>");
}
const datetime mutex_time = GlobalVariableSet(kEA_NAME, 1.0);
if (mutex_time == 0)
{
const int errcode = GetLastError();
Print("GlobalVariableSet: ERRCODE[", errcode, "]:", ErrorDescription(errcode));
}
}
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-039_AutoChartSet: <EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//-----------------------------------------------------------------
// <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>0EA T<EFBFBD>0<EFBFBD>rKah<EFBFBD>:y
if (!IsTesting())
{
ChartSet(); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>R Y<EFBFBD>f
}
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-040_CenterSymbol: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0-N.Yk0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0I{h<EFBFBD>:y
//-----------------------------------------------------------------
if (!IsTesting())
{
CenterSymbol();
}
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-042_EA-Condition: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0EA<EFBFBD>rKah<EFBFBD>:y
//-----------------------------------------------------------------
if (IsTesting() == false)
{
EA_test();
EventSetTimer(60);
}
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-043_ChartComment: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>StP(u
//-----------------------------------------------------------------
// <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(); // %R<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0)R(uY0<EFBFBD>04XTo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0HQk0<EFBFBD> <EFBFBD>0g0j0D0h0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0KbMRk0h<EFBFBD>:yU0<EFBFBD>0<EFBFBD>00
ChartComment();
}
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-044_TradeHistry-pips: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0e\tk<EFBFBD>0pips<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0h<EFBFBD>:y
//-----------------------------------------------------------------
// <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>
history();
PosHis();
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-045_AutoSpread:<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//-----------------------------------------------------------------
// 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;
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-046_Slippage_Latency: <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>,n
//-----------------------------------------------------------------
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>Q<EFBFBD>RRgS<EFBFBD>Qt
if (Measurement) FileInit();
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-049_VisualModeButton: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0ON/OFFR<EFBFBD>f<EFBFBD>0<EFBFBD>0<EFBFBD>0
//-----------------------------------------------------------------
//+------------------------------------------------------------------+
// <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
EA_test(); // <EFBFBD>rKah<EFBFBD>:y
EventSetTimer(60); // <EFBFBD>rKah<EFBFBD>:y
}
//+------------------------------------------------------------------+
// <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>
history();
PosHis();
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0R<EFBFBD>0<EFBFBD>fH0<EFBFBD>0<EFBFBD>0<EFBFBD>0\Ob
Button("Visual", WindowExpertName(), StringLen(WindowExpertName()) * 12, 0, CHART_COLOR_BACKGROUND, 1);
{
ObjectSetInteger(0, "Visual", OBJPROP_STATE, true);
ObjectSetInteger(0, "Visual", OBJPROP_BORDER_COLOR, clrGray);
VisualMode = true;
}
//+------------------------------------------------------------------+
//-----------------------------------------------------------------
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//-----------------------------------------------------------------
// T-038_MagicChohukuAlert: <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<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));
}
}
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-042_EA-Condition: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0EA<EFBFBD>rKah<EFBFBD>:y
//-----------------------------------------------------------------
EventKillTimer();
ObjectDelete("EA_label");
//-----------------------------------------------------------------
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//-----------------------------------------------------------------
// T-040_CenterSymbol - <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0-N.Yk0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0I{h<EFBFBD>:y
//-----------------------------------------------------------------
if (!IsTesting())
{
CenterSymbol();
}
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-042_EA-Condition: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0EA<EFBFBD>rKah<EFBFBD>:y
//-----------------------------------------------------------------
if (IsTesting() == false)
{
CT++;
EA_test();
}
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-043_ChartComment - <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>StP(u
//-----------------------------------------------------------------
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>rKah<EFBFBD>:y
if (!IsTesting())
{
ChartComment(); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
}
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-044_TradeHistry-pips: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0e\tk<EFBFBD>0pips<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0h<EFBFBD>:y
//-----------------------------------------------------------------
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>}h0pipsh<EFBFBD>:y
if (IsTesting() == false || IsVisualMode() == true)
{
if (sf != Seconds() && OrdersTotal() > 0)
{
PosHis();
sf = Seconds();
}
if ((hf != iTime((string)0, 60, 0) && Seconds() > 30) || tof != OrdersHistoryTotal())
{
history();
hf = iTime((string)0, 60, 0);
tof = OrdersHistoryTotal();
}
}
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-045_AutoSpread:<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();
//PipsObject(); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<EFBFBD>:y
}
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-046_Slippage_Latency: <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>,n
//-----------------------------------------------------------------
// TODO: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S__j<EFBFBD><EFBFBD>L0j0D0_0<EFBFBD>00,g_j<EFBFBD><EFBFBD>o0~0`0<EFBFBD>[ňU0<EFBFBD>0f0D0j0D0
//-----------------------------------------------------------------
//-----------------------------------------------------------------
//0T-048_VolumeEntry: JS<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<z<EFBFBD>P
//-----------------------------------------------------------------
//JS<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<z<EFBFBD>P
//xBarsn0$R<EFBFBD>[g0o0j0O00Volume[0]g0<EFBFBD>Y$Ph00]0n0<EFBFBD>_pe<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0$R<EFBFBD>[<EFBFBD>0L<EFBFBD>F0
//Volume[0]o0<EFBFBD>Y$P0_0`0W0<EFBFBD>Y$Pg0<EFBFBD>l<EFBFBD>eL0$R<EFBFBD>[U0<EFBFBD>0j0D0S0h0<EFBFBD>0B0<EFBFBD>00pe<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0$R<EFBFBD>[<EFBFBD>0<EFBFBD>N<EFBFBD>Pg0L<EFBFBD>F0h0}<EFBFBD>[W0<EFBFBD>0Y0D00
//hQ<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<z<EFBFBD>Pk0<EFBFBD>ky00<EFBFBD>QtL0<EFBFBD><EFBFBD>O0j0<EFBFBD>00
//<EFBFBD><EFBFBD>zv~Xn0xBars$R<EFBFBD>[g0o00<EFBFBD>Y$Pn01<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>vW0K0$R<EFBFBD>[<EFBFBD>0L<EFBFBD>H0j0D0
//pe<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0$R<EFBFBD>[<EFBFBD>0L<EFBFBD>F0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0g0zln<EFBFBD>QtL0B0<EFBFBD>04XTo00#<EFBFBD><EFBFBD>}zv<EFBFBD>l<EFBFBD>0zln<EFBFBD>0p~<EFBFBD>0ԏY0S0h0<EFBFBD>0B0<EFBFBD>00
//hQ<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0g0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0g00#<EFBFBD><EFBFBD>}zv<EFBFBD>lL0!qD0K0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>_<EFBFBD><EFBFBD>
//#<EFBFBD><EFBFBD>}2<EFBFBD>bkn0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>N N<EFBFBD> <EFBFBD><EFBFBD>1<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(u <EFBFBD>
//<EFBFBD>,nn0P}<EFBFBD>g0<EFBFBD>8^10~20<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0~0g0B0<EFBFBD>0p0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0܈<EFBFBD>R$R<EFBFBD>[h0W0f0o0_j<EFBFBD><EFBFBD>W0_0<EFBFBD>]0<EFBFBD>0<EFBFBD>N
Ng0o0<EFBFBD>0<EFBFBD>0<EFBFBD>0L0 Y<EFBFBD>0<EFBFBD>0Y0N0<EFBFBD>0j0i0OUL<EFBFBD>B0<EFBFBD>0 <EFBFBD>
//<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0$R<EFBFBD>[L0<EFBFBD>0<EFBFBD>0<EFBFBD>0j0g<EFBFBD>ej0i0g0o00$R<EFBFBD>[<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0pe<EFBFBD>0<EFBFBD>X<EFBFBD>0W0f0<EFBFBD>[<EFBFBD>_<EFBFBD>0<EFBFBD>S<EFBFBD><EFBFBD>
//
// TODO: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>S__j<EFBFBD><EFBFBD>L0j0D0_0<EFBFBD>00,g_j<EFBFBD><EFBFBD>o0~0`0<EFBFBD>[ňU0<EFBFBD>0f0D0j0D0
//-----------------------------------------------------------------
//-----------------------------------------------------------------
// T-046_Slippage_Latency: <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>,n
//-----------------------------------------------------------------
// zlnL0TP/SLj0<EFBFBD>0<EFBFBD>`1X<EFBFBD>S<EFBFBD>_
if (Measurement) ClosedTradeTPSL();
//-----------------------------------------------------------------
}
//--------------------------------------------------------------------
// T-042_EA-Condition: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0EA<EFBFBD>rKah<EFBFBD>:y
//--------------------------------------------------------------------
//+------------------------------------------------------------------+
//| EAn0<EFBFBD>rKa<EFBFBD>0h<EFBFBD>:y <EFBFBD>S
N<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>0h0#<EFBFBD><EFBFBD>R |
//+------------------------------------------------------------------+
void OnTimer()
{
EA_test();
if (CT == 0)
EA_label ("<00>f<EFBFBD>e<EFBFBD>__j-N", clrYellow);
ChartWarning = 1; // S0n0 Ypeo00<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<EFBFBD>:y<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<EFBFBD>:yh0#<EFBFBD><EFBFBD>R
ChartSet2();
CT = 0;
}
void EA_test()
{
string label1 = "EA<z<>P-N";
string label2 = "<00>S<EFBFBD>^<5E><><<3C>1YWe";
string label3 = "<00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 N1<EFBFBD><EFBFBD>S";
string label4 = "<1A><>O<EFBFBD>0<EFBFBD>0<EFBFBD>0";
string labelx = label1;
if (Pass == false) labelx = label2;
else if (IsTradeAllowed() == false) labelx = label3;
else if (IsConnected() == false) labelx = label4;
if (Pass == false)
{
EA_label (label2, clrOrangeRed);
ChartWarning = 2;
ChartSet2();
}
else if (IsTradeAllowed() == false)
{
EA_label (label3, clrOrangeRed);
ChartWarning = 3;
ChartSet2();
}
else if (IsConnected() == false)
{
EA_label (label4, clrOrangeRed);
ChartWarning = 4;
ChartSet2();
}
else
{
EA_label (label1, clrLime);
ChartWarning = 0;
ChartSet2();
}
}
void EA_label(string text, color clr)
{
ObjectCreate(0, "EA_label", OBJ_LABEL, 0, 0, 0);
ObjectSetString(0, "EA_label", OBJPROP_TEXT, text);
ObjectSetInteger(0, "EA_label", OBJPROP_COLOR, clr);
ObjectSetInteger(0, "EA_label", OBJPROP_XDISTANCE, 6);
ObjectSetInteger(0, "EA_label", OBJPROP_YDISTANCE, 24);
ObjectSetInteger(0, "EA_label", OBJPROP_FONTSIZE, 8);
ObjectSetInteger(0, "EA_label", OBJPROP_SELECTABLE, false);
ObjectSetInteger(0, "EA_label", OBJPROP_HIDDEN, true);
ObjectSetString(0, "EA_label", OBJPROP_FONT, "Segoe UI");
ObjectSetInteger(0, "EA_label", OBJPROP_CORNER, CORNER_RIGHT_UPPER);
ObjectSetInteger(0, "EA_label", OBJPROP_ANCHOR, ANCHOR_RIGHT_UPPER);
ObjectSetInteger(0, "EA_label", OBJPROP_BACK, false);
}
// <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 >= 2? clrDarkGray : clrWhite;
color ChartWar2 = ChartWarning >= 2? clrDimGray : clrOlive;
color ChartWar3 = ChartWarning >= 2? 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);
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);
}
}
//+------------------------------------------------------------------+
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// T-039_AutoChartSet: <EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//--------------------------------------------------------------------
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>RgS<EFBFBD>] z <EFBFBD> |
//+------------------------------------------------------------------+
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);
}
}
//+------------------------------------------------------------------+
//--------------------------------------------------------------------
// T-040_CenterSymbol - <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0-N.Yk0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0I{h<EFBFBD>:y
//--------------------------------------------------------------------
//+------------------------------------------------------------------+
//| <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() == 5? "M5": Period() == 15? "M15": Period() == 30? "M30":
Period() == 60? "H1": Period() == 240? "H4": Period() == 1440? "D1": Period() == 10080? "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);
}
//+------------------------------------------------------------------+
//--------------------------------------------------------------------
// T-043_ChartComment - <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>StP(u
//--------------------------------------------------------------------
//+------------------------------------------------------------------+
//| <EFBFBD>)R<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>{ 00 |
//+------------------------------------------------------------------+
double CalculateLots(double risk, double lots)
{
return (risk * lots);
}
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<EFBFBD>:y |
//+------------------------------------------------------------------+
void ChartComment()
{
// <EFBFBD>rKak0<EFBFBD>0c0f0r<EFBFBD> Y<EFBFBD>f
color clrChartWar = ChartWarning >= 2? clrNONE : clrWhite;
color clrChartWarPP = ChartWarning >= 2? clrNONE : totalpips < 0? clrOrangeRed : clrWhite;
color clrChartWarPF = ChartWarning >= 2? clrNONE : 0 < ProfitFactor && ProfitFactor < 1? clrOrangeRed : 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 = "Magic : " + (string)MagicNumber;
string Comment1 = "Lots : " + LotsComment;
string Comment2 = "MM : " + (MM_ON == 0 ? "Fixed" : MM_ON == 1 ? "FreeMargin" : MM_ON == 2 ? "Balance" : "AddCredit");
string Comment3 = "Summertime : " + (Summertime == 0 ? "none" : Summertime == 1 ? "US" : "UK");
string Comment4 = "Spread Lim/Ave : " + DoubleToStr(MaxSpread_pips,1) + "/" + DoubleToStr(SpreadAve,1);
string Comment5 = "Stoploss B/S : " + DoubleToStr(StopLoss_pips_buy, 0) + "/" + DoubleToStr(StopLoss_pips_sell, 0);
string Comment6 = "Swap B/S : " + DoubleToStr(MarketInfo(Symbol(),MODE_SWAPLONG), 2) + "/" +
DoubleToStr(MarketInfo(Symbol(),MODE_SWAPSHORT), 2);
string Comment7 = "TradeCounts : " + DoubleToStr(TradeCounts, 0);
string Comment8 = "Profit (pips) : " + DoubleToStr(totalpips, 1);
string Comment9 = (plus_profit == 0 || minus_profit == 0? "Profit factor : ---" :
"Profit factor : " + DoubleToStr(ProfitFactor, 2));
string Comment10 = (plus_profit == 0 || minus_profit == 0? "RRR/Win% : ---/---" :
"RRR/Win% : " + DoubleToStr(RRR, 2) + "/" + DoubleToStr(WinPer, 1));
CommentLabel("ComObj0", Comment0, 4, 38, 10, clrYellow);
CommentLabel("ComObj1", Comment1, 4, 58, 10, clrYellow);
CommentLabel("ComObj2", Comment2, 6, 82, 8, clrChartWar);
CommentLabel("ComObj3", Comment3, 6, 100, 8, clrChartWar);
CommentLabel("ComObj4", Comment4, 6, 118, 8, clrChartWar);
CommentLabel("ComObj5", Comment5, 6, 136, 8, clrChartWarPP);
CommentLabel("ComObj6", Comment6, 6, 154, 8, clrChartWarPF);
CommentLabel("ComObj7", Comment7, 6, 172, 8, clrChartWar);
CommentLabel("ComObj8", Comment8, 6, 190, 8, clrChartWar);
CommentLabel("ComObj9", Comment9, 6, 208, 8, clrChartWar);
CommentLabel("ComObj10", Comment10, 6, 226, 8, clrChartWar);
}
void CommentLabel(string ComName, string ComText, int ComPos_x, int ComPos_y, int ComSize, color ComClr= clrBlack)
{
ComName = ComName;
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);
}
//+------------------------------------------------------------------+
//--------------------------------------------------------------------
// T-044_TradeHistry-pips: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0e\tk<EFBFBD>0pips<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0h<EFBFBD>:y
//--------------------------------------------------------------------
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0e\tkh<EFBFBD>:y<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0o0%R<EFBFBD>Qt<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD> |
//+------------------------------------------------------------------+
void PosHis()
{
int res;
double pips = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
res = OrderSelect(i, SELECT_BY_POS);
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 (OrderSymbol() != Symbol() || OrderType() > 1 || OrderMagicNumber() != MagicNumber)
continue;
// T<EFBFBD>pips<EFBFBD><EFBFBD>{
totalpips += trend((string)OrderTicket(), OrderOpenTime(), OrderOpenPrice(), OrderCloseTime(), OrderClosePrice(), OrderType());
// <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;
}
}
//+------------------------------------------------------------------+
double trend(string obj_name, datetime Time1, double Close1, datetime Time2, double Close2, int type)
{
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("hislt" + obj_name);
ObjectCreate(0, "hislt" + obj_name, OBJ_TREND, 0, Time1, Close1, Time2, Close2);
ObjectSetInteger(0, "hislt" + obj_name, OBJPROP_COLOR, type == 0 ? clrDodgerBlue : clrOrangeRed);
ObjectSetInteger(0, "hislt" + obj_name, OBJPROP_STYLE, 0);
ObjectSetInteger(0, "hislt" + obj_name, OBJPROP_WIDTH, 2);
ObjectSetInteger(0, "hislt" + 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, "hislt" + obj_name, OBJPROP_RAY_RIGHT, false); // <EFBFBD>Sk0<EFBFBD>}<EFBFBD>0<EFBFBD>^w<EFBFBD>
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>}<EFBFBD>Qn0pipsh<EFBFBD>:y
// <EFBFBD>eW[,gSO
ObjectDelete("hislx" + obj_name);
ObjectCreate(0, "hislx" + obj_name, OBJ_TEXT, 0, Timex, Close2);
ObjectSetInteger(0, "hislx" + obj_name, OBJPROP_COLOR, pips < 0 ? clrOrangeRed : !IsTesting()? clrLime : clrYellow);//type == 0 ? BuyColor : SellColor);
ObjectSetInteger(0, "hislx" + 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, "hislx" + obj_name, OBJPROP_FONTSIZE, 12); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
ObjectSetInteger(0, "hislx" + obj_name, OBJPROP_ANCHOR, ANCHOR_RIGHT); // <EFBFBD>c;uMOn
ObjectSetString(0, "hislx" + obj_name, OBJPROP_TEXT, DoubleToStr(pips, 1)); // h<EFBFBD>:yY0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
ObjectSetString(0, "hislx" + obj_name, OBJPROP_FONT, "Segoe UI Semibold"); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
return(pips);
}
//+------------------------------------------------------------------+
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// T-045_AutoSpread: <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>,n<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 |
//+------------------------------------------------------------------+
void MeasureSP()
{
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;
// 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;
}
// <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
}
//+------------------------------------------------------------------+
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>k0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<EFBFBD>:y
void PipsObject()
{
// 1:00<EFBFBD>0<EFBFBD>0<EFBFBD>naW0j0D04XT
string Data1 = "Tradeable limit : " + DoubleToStr(MaxSpread_pips,1) + " ";
string Data2 = "MarketInfo : "+DoubleToStr(MeasureSpread,1) + " ";
string Data3 = "Average : " + DoubleToStr(SpreadAve,1) + " ";
string Data4 = "Max : " + DoubleToStr(SpreadMax,1) + " ";
string Data5 = "Min : " + (SpreadMin==1000? "---" : DoubleToStr(SpreadMin,1)) + " ";
label("SP0", "[Spread data (pips)]" + " ", 0, 114, 11, clrWhite);
label("SP1", Data1, 0, 88, 11, clrYellow);
label("SP2", Data2, 0, 66, 11, clrWhite);
label("SP3", Data3, 0, 44, 11, clrWhite);
label("SP4", Data4, 0, 22, 11, clrWhite);
label("SP5", Data5, 0, 0, 11, clrWhite);
}
//+------------------------------------------------------------------+
void label(string name, string label_text, int pos_x, int pos_y, int s, color clr= clrBlack)
{
name = name;
ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
ObjectSetString (0, name, OBJPROP_TEXT, label_text);
ObjectSetInteger(0, name, OBJPROP_FONTSIZE, s);
ObjectSetString (0, name, OBJPROP_FONT, "Segoe UI");
ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER_RIGHT_LOWER);
ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_RIGHT_LOWER);
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, pos_x);
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, pos_y);
ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
ObjectSetInteger(0, name, OBJPROP_BACK, true);
ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);
}
//+------------------------------------------------------------------+
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// T-046_Slippage_Latency: <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>,n
//--------------------------------------------------------------------
//+------------------------------------------------------------------+
//| <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() + "_<00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0.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", "Volume[0]", "<00>f<EFBFBD><66>BfVolume[0]", "<00>f<EFBFBD><66>Bfi");
// <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<EFBFBD>bL<EFBFBD>(u <EFBFBD>
void OpenTradeInfo()
{
OpenLatency = GetTickCount() - StartOrderTimestamp; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>,n
Order_Price = NormalizeDouble(Order_Price , Digits); // <EFBFBD><EFBFBD>D0<EFBFBD>l<EFBFBD>e<EFBFBD>O<h<EFBFBD>0ck<EFBFBD><EFBFBD>S
Open_Yakujyou_Price = NormalizeDouble(OrderOpenPrice(), Digits); // <EFBFBD>[<EFBFBD><EFBFBD>}<EFBFBD>[W0_0<EFBFBD>O<h0ck<EFBFBD><EFBFBD>S
Open_Slippage = NormalizeDouble(OrderType() == OP_BUY? Order_Price - Open_Yakujyou_Price :
Open_Yakujyou_Price - Order_Price, Digits) / xpoint; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00AhT<EFBFBD>0[0
Open_Spread = NormalizeDouble(OSpread, Digits) / xpoint; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00AhT<EFBFBD>0[0
Open_Type = OrderType() == OP_BUY? "Buy" : "Sell";
FileWriteingOpen(); // <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
Close_Yakujou_Price = NormalizeDouble(OrderClosePrice(), Digits); // <EFBFBD>[<EFBFBD><EFBFBD>}<EFBFBD>[W0_0<EFBFBD>O<h
Close_Slippage = NormalizeDouble(OrderType() == OP_BUY? Close_Yakujou_Price - Close_Price :
Close_Price - Close_Yakujou_Price, Digits) / xpoint; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00AhT<EFBFBD>0[0
Close_Spread = NormalizeDouble(CSpread, Digits) / xpoint; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00AhT<EFBFBD>0[0
profitpips = NormalizeDouble(OrderType() == OP_BUY? (OrderClosePrice() - OrderOpenPrice()) / xpoint :
(OrderOpenPrice() - OrderClosePrice()) / xpoint, 1);
Close_Type = "Close";
FileWriteingClose(); // <EFBFBD>fM0<EFBFBD><EFBFBD>0<EFBFBD>Qt
}
// <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>fM0<EFBFBD><EFBFBD>0
void FileWriteingOpen()
{
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(), Hour(), Minute(), Open_Type, Order_Price, Open_Yakujyou_Price,
Open_Spread, Open_Slippage, OpenLatency,
"---", CalculateLots(MM_Risk, MaxStopLoss_pips), Symbol(), Timeframe, WindowExpertName(),
OrderMagicNumber(), V0, Volume[0], i);
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()
{
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(), Hour(), Minute(), Close_Type, Close_Price, Close_Yakujou_Price,
Close_Spread, Close_Slippage, CloseLatency,
profitpips, CalculateLots(MM_Risk, MaxStopLoss_pips), Symbol(), Timeframe, WindowExpertName(),
OrderMagicNumber(), V0, Volume[0], i);
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_<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0kn0[tp]I{n0<EFBFBD>N<EFBFBD>ig0$R%R0g<EFBFBD>_>\<EFBFBD>NYn0<EFBFBD>N<EFBFBD>io0<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
void ClosedTradeTPSL()
{
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) // 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
Close_Yakujou_Price = NormalizeDouble(OrderClosePrice(), Digits); // <EFBFBD>[<EFBFBD><EFBFBD>}<EFBFBD>[W0_0<EFBFBD>O<h
Close_Slippage = NormalizeDouble(OrderType() == OP_BUY? Close_Yakujou_Price - Close_Price : Close_Price - Close_Yakujou_Price, Digits) / xpoint; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00AhT<EFBFBD>0[0
Close_Spread = MarketInfo(NULL,MODE_SPREAD) / 10; // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>00AhT<EFBFBD>0[0
profitpips = NormalizeDouble(OrderType() == OP_BUY? (OrderClosePrice() - OrderOpenPrice()) / xpoint :
(OrderOpenPrice() - OrderClosePrice()) / xpoint, 1);
Close_Type = tpsl == "[tp]"? "TP" : "SL";
FileWriteingClose(); // <EFBFBD>fM0<EFBFBD><EFBFBD>0<EFBFBD>Qt
break;
}
}
}
}
}
//+------------------------------------------------------------------+
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// T-049_VisualModeButton: <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0ON/OFFR<EFBFBD>f<EFBFBD>0<EFBFBD>0<EFBFBD>0
//--------------------------------------------------------------------
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0R<EFBFBD>f<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>EAh<EFBFBD>:y T<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <EFBFBD> |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, //<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0ID
const long &lparam, //long<EFBFBD>W<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
const double &dparam, //double<EFBFBD>W<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
const string &sparam) //string<EFBFBD>W<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
{
int xx = StringLen(WindowExpertName()) * 12;
if(id == CHARTEVENT_OBJECT_CLICK)
{
if(ObjectGetInteger(0,"Visual",OBJPROP_STATE) == true)
{
if(sparam == "Visual")
{
VisualMode = true;
history();
PosHis();
Button("Visual", WindowExpertName(), xx, 0, CHART_COLOR_BACKGROUND, 1);
ObjectSetInteger(0, "Visual", OBJPROP_STATE, true);
ObjectSetInteger(0, "Visual", OBJPROP_BORDER_COLOR, clrGray);
EA_label ("<00>rKa<4B>0<EFBFBD>0<EFBFBD>0-N...", clrWhite);
}
}
else
{
VisualMode = false;
ObjectsDeleteAll();
Button("Visual", WindowExpertName(), xx, 0, CHART_COLOR_BACKGROUND, 1);
ObjectSetInteger(0, "Visual", OBJPROP_STATE, false);
ObjectSetInteger(0, "Visual", OBJPROP_BORDER_COLOR, clrSilver);
ChartComment();
for(int i=2; i<=15; i++)
{
ObjectDelete(0,"ComObj"+(string)i);
}
EA_label ("<00>rKah<61>:yOFF", clrWhite);
}
}
}
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>N<EFBFBD>i
void Button(string name, string text, int x, int y ,color clr, int a)
{
int xx = StringLen(WindowExpertName()) * 12 - 26;
ObjectCreate(0,name,OBJ_BUTTON,ChartWindowFind(),0,0); // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0\Ob<EFBFBD>0Y0<EFBFBD>0<EFBFBD>S0n0<EFBFBD>k<EFBFBD><EFBFBD>g0o0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>04X@bL0c<EFBFBD>[U0<EFBFBD>0f0D0j0D0<EFBFBD>g`0Q0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0
ObjectSetInteger(0,name,OBJPROP_COLOR,clrWhite); // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>eW[r<EFBFBD><EFBFBD>0-<EFBFBD><EFBFBD>[Y0<EFBFBD>0
ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0x<EFBFBD><EFBFBD>bW0f0<EFBFBD>y<EFBFBD>RW0_0<EFBFBD>0<EFBFBD>mW0_0<EFBFBD>0W0j0D0<EFBFBD>0F0k0Y0<EFBFBD>0_0<EFBFBD>0n0-<EFBFBD><EFBFBD>[
ObjectSetInteger(0,name,OBJPROP_HIDDEN,true); // <EFBFBD>0<EFBFBD>0<EFBFBD>0L0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0h<EFBFBD>:yU0<EFBFBD>0j0D0<EFBFBD>0F0k0Y0<EFBFBD>0_0<EFBFBD>0n0-<EFBFBD><EFBFBD>[
ObjectSetString (0,name,OBJPROP_TEXT,text); // <EFBFBD>0<EFBFBD>0<EFBFBD>0k0h<EFBFBD>:yY0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0-<EFBFBD><EFBFBD>[Y0<EFBFBD>0
ObjectSetString (0,name,OBJPROP_FONT,"Segoe UI"); // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>eW[n0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0-<EFBFBD><EFBFBD>[Y0<EFBFBD>0
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,8); // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>eW[<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0-<EFBFBD><EFBFBD>[Y0<EFBFBD>0
ObjectSetInteger(0,name,OBJPROP_CORNER,a); // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>W<EFBFBD>nMOn<EFBFBD>0M0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD>S
N<EFBFBD>0<EFBFBD>]
N<EFBFBD>0<EFBFBD>] N<EFBFBD>0<EFBFBD>S N <EFBFBD>
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x); // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>W<EFBFBD>nMOnK0<EFBFBD>0n0X<EFBFBD>^j<EFBFBD>0-<EFBFBD><EFBFBD>[
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y); // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>W<EFBFBD>nMOnK0<EFBFBD>0n0Y<EFBFBD>^j<EFBFBD>0-<EFBFBD><EFBFBD>[
ObjectSetInteger(0,name,OBJPROP_XSIZE,xx); // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0*jE^n0-<EFBFBD><EFBFBD>[
ObjectSetInteger(0,name,OBJPROP_YSIZE,24); // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0&~E^n0-<EFBFBD><EFBFBD>[
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clr); // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0r<EFBFBD>n0-<EFBFBD><EFBFBD>[
//ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,clrGray); // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>g<EFBFBD>}n0r<EFBFBD><EFBFBD>0-<EFBFBD><EFBFBD>[ <EFBFBD>W,g<EFBFBD>vk0o0<EFBFBD>0<EFBFBD>0<EFBFBD>0r<EFBFBD>h0N<EFBFBD>}g0OUL<EFBFBD>j0O0f00<EFBFBD>g<EFBFBD>}<EFBFBD>0<EFBFBD>NQ0_0D0Bf`0Q0%Rk0Y0<EFBFBD>0
//ObjectSetInteger(0,name,OBJPROP_STATE,false); // <EFBFBD>0<EFBFBD>0<EFBFBD>0n0<EFBFBD>rKa<EFBFBD>0-<EFBFBD><EFBFBD>[<EFBFBD><EFBFBD>bU0<EFBFBD>0f0D0<EFBFBD>0<EFBFBD>rKaK00<EFBFBD>bU0<EFBFBD>0f0D0j0D0<EFBFBD>rKaK0 <EFBFBD> gRo0<EFBFBD>bU0<EFBFBD>0f0D0j0D0<EFBFBD>rKag0'YN+Y
ObjectSetInteger(0,name,OBJPROP_BACK,false); // <EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0̀ofh<EFBFBD>:y-<EFBFBD><EFBFBD>[
//ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
}
//+------------------------------------------------------------------+
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// T-051_EquityCheck: <<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//--------------------------------------------------------------------
// <EFBFBD>Nan0zzD0f0D0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
// ; StopLoss_pipsn0 Ypeo00<EFBFBD>N<EFBFBD>ik0<EFBFBD>0<EFBFBD>0<EFBFBD><EFBFBD> Y<EFBFBD>f
// <EFBFBD>S<EFBFBD><EFBFBD>0<EFBFBD>0<EFBFBD>0
// https://autofx100.com/2021/03/01/ordersend-error-134-not-enough-money/
//--------------------------------------------------------------------