917 lines
17 KiB
Plaintext
917 lines
17 KiB
Plaintext
////////////////////////////////////////////////////////////
|
|
//
|
|
// SaherElm IT Center MQL5 XTestPRVD Signal Provider Library
|
|
// --------------------------------------------------------
|
|
// Name: XTestPRVD
|
|
// Description: XTestPRVD Signal provider ...
|
|
//
|
|
//
|
|
// Maintainer:
|
|
// ------------
|
|
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
|
|
//
|
|
//////////////////////////////////////////////////////
|
|
//
|
|
// Global Properties ...
|
|
#property library
|
|
#property copyright "Copyright 2023, SaherElm IT Center"
|
|
#property link "https://www.saherelm.ir"
|
|
#property version "1.00"
|
|
#property strict
|
|
|
|
//
|
|
// START Imports/Includes ...
|
|
//
|
|
|
|
//
|
|
// Include Common Library ...
|
|
#include "../../Libraries/x-saherelm.common.lib.mq5"
|
|
|
|
//
|
|
// Include Logger Library ...
|
|
#include "../../Libraries/x-saherelm.log.lib.mq5"
|
|
|
|
//
|
|
// Include Alert Library ...
|
|
#include "../../Libraries/x-saherelm.alert.lib.mq5"
|
|
|
|
//
|
|
// Include Draw Library ...
|
|
#include "../../Libraries/x-saherelm.draw.lib.mq5"
|
|
|
|
//
|
|
#include "../../Helpers/Test/x121.xpv.test.helper.mq5"
|
|
#include "../../Helpers/Test/x121.xmc.test.helper.mq5"
|
|
#include "../../Helpers/Test/x121.xmrb.test.helper.mq5"
|
|
#include "../../Helpers/Test/x121.xichi.test.helper.mq5"
|
|
#include "../../Helpers/Test/x121.xtrnd.test.helper.mq5"
|
|
#include "../../Helpers/Test/x121.xatrsl.test.helper.mq5"
|
|
|
|
//
|
|
// END Imports/Includes ...
|
|
//
|
|
|
|
//
|
|
// START Enum/Constant Definitions ...
|
|
//
|
|
|
|
//
|
|
// Model Market Sence ...
|
|
struct X121MarketCondition
|
|
{
|
|
//
|
|
// XPV ...
|
|
|
|
//
|
|
bool isPVNewPeak;
|
|
bool isPVSamePeak;
|
|
bool isPVPeakBreakedUp;
|
|
bool isPVPeakBreakedDown;
|
|
|
|
//
|
|
bool isPVNewVale;
|
|
bool isPVSameVale;
|
|
bool isPVValeBreakedUp;
|
|
bool isPVValeBreakedDown;
|
|
|
|
//
|
|
// SSL Channel ...
|
|
bool isSSLUpOverDown;
|
|
bool isSSLUpUnderDown;
|
|
bool isSSLUpCrossedOverDown;
|
|
bool isSSLUpCrossedUnderDown;
|
|
|
|
//
|
|
// XICHI ...
|
|
|
|
//
|
|
// TNKIJ ...
|
|
bool isIchiTenkanSenOverKijunSen;
|
|
bool isIchiTenkanSenUnderKijunSen;
|
|
bool isIchiTenkanSenCrossedOverKijunSen;
|
|
bool isIchiTenkanSenCrossedUnderKijunSen;
|
|
|
|
//
|
|
// KUMO ...
|
|
bool isIchiKumoBullish;
|
|
bool isIchiKumoBearish;
|
|
bool isIchiFutureKumoBullish;
|
|
bool isIchiFutureKumoBearish;
|
|
bool isIchiKumoSwitchedToBullish;
|
|
bool isIchiKumoSwitchedToBearish;
|
|
bool isIchiFutureKumoSwitchedToBullish;
|
|
bool isIchiFutureKumoSwitchedToBearish;
|
|
|
|
//
|
|
// TNKUMO ...
|
|
bool isIchiTenkanSenOverSenkouSpanA;
|
|
bool isIchiTenkanSenOverSenkouSpanB;
|
|
bool isIchiTenkanSenCrossedOverSenkouSpanA;
|
|
bool isIchiTenkanSenCrossedOverSenkouSpanB;
|
|
bool isIchiTenkanSenUnderSenkouSpanA;
|
|
bool isIchiTenkanSenUnderSenkouSpanB;
|
|
bool isIchiTenkanSenCrossedUnderSenkouSpanA;
|
|
bool isIchiTenkanSenCrossedUnderSenkouSpanB;
|
|
|
|
//
|
|
// KIJUMO ...
|
|
bool isIchiKijunSenOverSenkouSpanA;
|
|
bool isIchiKijunSenOverSenkouSpanB;
|
|
bool isIchiKijunSenCrossedOverSenkouSpanA;
|
|
bool isIchiKijunSenCrossedOverSenkouSpanB;
|
|
bool isIchiKijunSenUnderSenkouSpanA;
|
|
bool isIchiKijunSenUnderSenkouSpanB;
|
|
bool isIchiKijunSenCrossedUnderSenkouSpanA;
|
|
bool isIchiKijunSenCrossedUnderSenkouSpanB;
|
|
|
|
//
|
|
// XTRND ...
|
|
|
|
//
|
|
// CURRENT ...
|
|
bool isTrendBullish;
|
|
bool isTrendBearish;
|
|
bool isTrendConsolidation;
|
|
bool isTrendSwitchedToBullish;
|
|
bool isTrendSwitchedToBearish;
|
|
bool isTrendSwitchedToConsolidation;
|
|
|
|
//
|
|
// LEVEL 1 ...
|
|
bool isTrendL1Bullish;
|
|
bool isTrendL1Bearish;
|
|
bool isTrendL1Consolidation;
|
|
bool isTrendL1SwitchedToBullish;
|
|
bool isTrendL1SwitchedToBearish;
|
|
bool isTrendL1SwitchedToConsolidation;
|
|
|
|
//
|
|
// LEVEL 2 ...
|
|
bool isTrendL2Bullish;
|
|
bool isTrendL2Bearish;
|
|
bool isTrendL2Consolidation;
|
|
bool isTrendL2SwitchedToBullish;
|
|
bool isTrendL2SwitchedToBearish;
|
|
bool isTrendL2SwitchedToConsolidation;
|
|
|
|
//
|
|
// LEVEL 3 ...
|
|
bool isTrendL3Bullish;
|
|
bool isTrendL3Bearish;
|
|
bool isTrendL3Consolidation;
|
|
bool isTrendL3SwitchedToBullish;
|
|
bool isTrendL3SwitchedToBearish;
|
|
bool isTrendL3SwitchedToConsolidation;
|
|
|
|
//
|
|
// XMRB ...
|
|
|
|
//
|
|
// MRIBBON ...
|
|
bool isRibbonBullish;
|
|
bool isRibbonBearish;
|
|
bool isRibbonSwitchedToBullish;
|
|
bool isRibbonSwitchedToBearish;
|
|
|
|
//
|
|
// RIBOON 1 ...
|
|
bool isRibbon1Bullish;
|
|
bool isRibbon1Bearish;
|
|
bool isRibbon1SwitchedToBullish;
|
|
bool isRibbon1SwitchedToBearish;
|
|
|
|
//
|
|
// RIBOON 2 ...
|
|
bool isRibbon2Bullish;
|
|
bool isRibbon2Bearish;
|
|
bool isRibbon2SwitchedToBullish;
|
|
bool isRibbon2SwitchedToBearish;
|
|
|
|
//
|
|
// RIBOON 3 ...
|
|
bool isRibbon3Bullish;
|
|
bool isRibbon3Bearish;
|
|
bool isRibbon3SwitchedToBullish;
|
|
bool isRibbon3SwitchedToBearish;
|
|
|
|
//
|
|
// RIBOON 4 ...
|
|
bool isRibbon4Bullish;
|
|
bool isRibbon4Bearish;
|
|
bool isRibbon4SwitchedToBullish;
|
|
bool isRibbon4SwitchedToBearish;
|
|
|
|
//
|
|
// RIBOON 5 ...
|
|
bool isRibbon5Bullish;
|
|
bool isRibbon5Bearish;
|
|
bool isRibbon5SwitchedToBullish;
|
|
bool isRibbon5SwitchedToBearish;
|
|
|
|
//
|
|
// XMC ...
|
|
bool isMCFastOverSlow;
|
|
bool isMCFastUnderSlow;
|
|
bool isMCFastCrossedOverSlow;
|
|
bool isMCFastCrossedUnderSlow;
|
|
bool isMCFastOverVerifier;
|
|
bool isMCFastUnderVerifier;
|
|
bool isMCFastCrossedOverVerifier;
|
|
bool isMCFastCrossedUnderVerifier;
|
|
bool isMCSlowOverVerifier;
|
|
bool isMCSlowUnderVerifier;
|
|
bool isMCSlowCrossedOverVerifier;
|
|
bool isMCSlowCrossedUnderVerifier;
|
|
|
|
//
|
|
// XAMA ...
|
|
bool isXAMABullish;
|
|
bool isXAMABearish;
|
|
bool isXAMANeutural;
|
|
bool isXAMAChangedToBullish;
|
|
bool isXAMAChangedToBearish;
|
|
bool isXAMAChangedToNeutural;
|
|
|
|
//
|
|
// XTM ...
|
|
bool isXTMBullish;
|
|
bool isXTMBearish;
|
|
bool isXTMNeutural;
|
|
bool isXTMChangedToBullish;
|
|
bool isXTMChangedToBearish;
|
|
bool isXTMChangedToNeutural;
|
|
}
|
|
|
|
//
|
|
// END Enum/Constant Definitions ...
|
|
//
|
|
|
|
//
|
|
// START Variables ...
|
|
//
|
|
|
|
//
|
|
int mcclearHandler = INVALID_HANDLE;
|
|
|
|
//
|
|
// END Variables ...
|
|
//
|
|
|
|
//
|
|
// START Signal Provider Functions ...
|
|
//
|
|
|
|
//
|
|
bool XTestPRVDOnInit()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
result = XATRSLHLPOnInit();
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = XICHIHLPOnInit();
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = XMCHLPOnInit();
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = XMRBHLPOnInit();
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = XPVHLPOnInit();
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = XTRNDHLPOnInit();
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Initial CCLear Handler ...
|
|
mcclearHandler = iCustom(
|
|
_Symbol,
|
|
_Period,
|
|
"x-saherelm.x121.xcclear",
|
|
//
|
|
// Inputs ...
|
|
//
|
|
// CHARTSTYLE ...
|
|
"",
|
|
//
|
|
// Up Color ...
|
|
clrLime,
|
|
//
|
|
// Down Color ...
|
|
clrRed,
|
|
//
|
|
// Line mode and Doji candlestick Color ...
|
|
clrLime,
|
|
//
|
|
// Bullish Color ...
|
|
clrRed,
|
|
//
|
|
// Bearish Color ...
|
|
clrLime,
|
|
//
|
|
// Volumes Color ...
|
|
clrGreen,
|
|
//
|
|
// PRESENTATION ...
|
|
"",
|
|
true
|
|
//
|
|
);
|
|
result = mcclearHandler != INVALID_HANDLE;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
void XTestPRVDOnDeInit()
|
|
{
|
|
//
|
|
XATRSLHLPOnDeInit();
|
|
XICHIHLPOnDeInit();
|
|
XMCHLPOnDeInit();
|
|
XMRBHLPOnDeInit();
|
|
XPVHLPOnDeInit();
|
|
XTRNDHLPOnDeInit();
|
|
}
|
|
|
|
//
|
|
void XTestPRVDOnTick()
|
|
{
|
|
XATRSLHLPReadBuffers();
|
|
XICHIHLPReadBuffers();
|
|
XMCHLPReadBuffers();
|
|
XMRBHLPReadBuffers();
|
|
XPVHLPReadBuffers();
|
|
XTRNDHLPReadBuffers();
|
|
}
|
|
|
|
//
|
|
bool XTestPRVDProcessSignals(XSignal &result)
|
|
{
|
|
//
|
|
bool mResult = false;
|
|
|
|
//
|
|
// BUY ...
|
|
|
|
//
|
|
Clean(result);
|
|
bool hasLongSignal = XTestPRVDHasLongSignal(result);
|
|
if (hasLongSignal)
|
|
{
|
|
//
|
|
mResult = true;
|
|
return mResult;
|
|
}
|
|
|
|
//
|
|
// SELL ...
|
|
|
|
//
|
|
Clean(result);
|
|
bool hasShortignal = XTestPRVDHasShortSignal(result);
|
|
if (hasShortignal)
|
|
{
|
|
//
|
|
mResult = true;
|
|
return mResult;
|
|
}
|
|
|
|
//
|
|
return mResult;
|
|
}
|
|
|
|
//
|
|
bool XTestPRVDHasLongSignal(XSignal &result)
|
|
{
|
|
//
|
|
bool mResult = false;
|
|
return mResult;
|
|
|
|
//
|
|
XOHCLSupRes supRes = XPVHLPFindCandleSupprtAndResistance(1, 6);
|
|
bool hasSupport = ArraySize(supRes.sup) > 0;
|
|
bool hasResistance = ArraySize(supRes.res) > 0;
|
|
|
|
//
|
|
double r2r = 1.2;
|
|
double riskAmount = 0.005;
|
|
double entry = GetEntry(
|
|
_Symbol,
|
|
POSITION_TYPE_BUY);
|
|
double sl = entry -
|
|
(hasSupport
|
|
? (supRes.sup[ArrayMaximum(supRes.sup)] - supRes.sup[ArrayMinimum(supRes.sup)])
|
|
: hasResistance
|
|
? (supRes.res[ArrayMaximum(supRes.res)] - supRes.res[ArrayMinimum(supRes.res)])
|
|
: PointToPrice(
|
|
_Symbol,
|
|
10))
|
|
//
|
|
;
|
|
|
|
//
|
|
bool isXTestHasSignal = XTestPRVDHasLongCondition();
|
|
if (isXTestHasSignal)
|
|
{
|
|
//
|
|
Add(
|
|
"XTest",
|
|
result.providers);
|
|
|
|
//
|
|
result.r2r = 1.5;
|
|
|
|
//
|
|
result.sl = atrslDownBuffer[1];
|
|
}
|
|
|
|
//
|
|
bool isXTRNDHasSignal = XTRNDHasLongCondition();
|
|
if (isXTRNDHasSignal)
|
|
{
|
|
//
|
|
Add(
|
|
"XTRND",
|
|
result.providers);
|
|
}
|
|
|
|
//
|
|
bool isXICHIHasSignal = XICHIHasLongCondition();
|
|
if (isXICHIHasSignal)
|
|
{
|
|
//
|
|
Add(
|
|
"XICHI",
|
|
result.providers);
|
|
}
|
|
|
|
//
|
|
mResult =
|
|
//
|
|
isXTRNDHasSignal
|
|
//
|
|
||
|
|
//
|
|
isXICHIHasSignal
|
|
//
|
|
;
|
|
|
|
//
|
|
if (mResult)
|
|
{
|
|
//
|
|
result.sl = sl;
|
|
result.r2r = r2r;
|
|
result.entry = entry;
|
|
result.symbol = _Symbol;
|
|
result.period = _Period;
|
|
result.riskAmount = riskAmount;
|
|
result.type = POSITION_TYPE_BUY;
|
|
result.supportAndResistance = supRes;
|
|
}
|
|
|
|
//
|
|
return mResult;
|
|
}
|
|
|
|
//
|
|
bool XTestPRVDHasShortSignal(XSignal &result)
|
|
{
|
|
//
|
|
bool mResult = false;
|
|
|
|
//
|
|
XOHCL c1 = GetCandle(
|
|
_Symbol,
|
|
_Period,
|
|
1);
|
|
XOHCLSupRes supRes = XPVHLPFindCandleSupprtAndResistance(1, 6);
|
|
bool hasSupport = ArraySize(supRes.sup) > 0;
|
|
bool hasResistance = ArraySize(supRes.res) > 0;
|
|
|
|
//
|
|
double r2r = 1.2;
|
|
double riskAmount = 0.005;
|
|
double entry = GetEntry(
|
|
_Symbol,
|
|
POSITION_TYPE_SELL);
|
|
double sl = entry + (supRes.res[ArrayMaximum(supRes.res)] - supRes.res[ArrayMinimum(supRes.res)]);
|
|
|
|
//
|
|
bool isXTRNDHasSignal = XTRNDHasShortCondition();
|
|
if (isXTRNDHasSignal)
|
|
{
|
|
//
|
|
Add(
|
|
"XTRND",
|
|
result.providers);
|
|
}
|
|
|
|
//
|
|
bool isICHIHasSignal = XICHIHasShortCondition();
|
|
if (isICHIHasSignal)
|
|
{
|
|
//
|
|
Add(
|
|
"XICHI",
|
|
result.providers);
|
|
}
|
|
|
|
//
|
|
mResult =
|
|
//
|
|
isXTRNDHasSignal
|
|
//
|
|
// ||
|
|
// //
|
|
// TODO:
|
|
// isICHIHasSignal
|
|
//
|
|
;
|
|
|
|
//
|
|
if (mResult)
|
|
{
|
|
//
|
|
result.sl = sl;
|
|
result.r2r = r2r;
|
|
result.entry = entry;
|
|
result.symbol = _Symbol;
|
|
result.period = _Period;
|
|
result.riskAmount = riskAmount;
|
|
result.type = POSITION_TYPE_SELL;
|
|
result.mode = X_ORDER_MODE_MARKET;
|
|
result.supportAndResistance = supRes;
|
|
|
|
//
|
|
if (!hasSupport)
|
|
{
|
|
//
|
|
// When there is no any Provided Support for a Singal ...
|
|
// Place Pending Order instead of Market Order and use
|
|
// PV's LL Buffers as Supprt area ...
|
|
result.mode = X_ORDER_MODE_STOP;
|
|
double supportArea = XPVHLPGetMaxLL(1) - GetCandleShadow(c1);
|
|
result.entry = supportArea;
|
|
}
|
|
}
|
|
|
|
//
|
|
return mResult;
|
|
}
|
|
|
|
//
|
|
// TODO: Implement it ...
|
|
bool XTestPRVDForceCloseAllShorts()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
// //
|
|
// XOHCL c1 = GetCandle(
|
|
// _Symbol,
|
|
// _Period,
|
|
// 1);
|
|
|
|
// //
|
|
// result =
|
|
// //
|
|
// c1.low < ichiKijunSenBuffer[1] &&
|
|
// c1.high > ichiKijunSenBuffer[1]
|
|
// //
|
|
// ;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool XTestPRVDHasLongCondition()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool XTestPRVDHasShortCondition()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
XOHCL c1 = GetCandle(
|
|
_Symbol,
|
|
_Period,
|
|
1);
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// XTRND ..
|
|
|
|
//
|
|
bool XTRNDForceCloseAllLongs()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool XTRNDForceCloseAllShorts()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool XTRNDHasLongCondition()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
XOHCL c1 = GetCandle(
|
|
_Symbol,
|
|
_Period,
|
|
1);
|
|
|
|
//
|
|
XIchiInfo ichi1 = XICHIHLPGetInfo(1);
|
|
|
|
//
|
|
bool isTrendSwitchedToBullish =
|
|
//
|
|
(
|
|
//
|
|
XTRNDHLPIsL3TrendSwitchedBullish(1) &&
|
|
XTRNDHLPIsTrendBullish(1) &&
|
|
XTRNDHLPIsL1TrendBullish(1) &&
|
|
XTRNDHLPIsL2TrendBullish(1)
|
|
//
|
|
)
|
|
//
|
|
||
|
|
//
|
|
(
|
|
//
|
|
XTRNDHLPIsL2TrendSwitchedBullish(1) &&
|
|
XTRNDHLPIsTrendBullish(1) &&
|
|
XTRNDHLPIsL1TrendBullish(1) &&
|
|
XTRNDHLPIsL3TrendBullish(1)
|
|
//
|
|
)
|
|
//
|
|
||
|
|
//
|
|
(
|
|
//
|
|
XTRNDHLPIsL1TrendSwitchedBullish(1) &&
|
|
XTRNDHLPIsTrendBullish(1) &&
|
|
XTRNDHLPIsL2TrendBullish(1) &&
|
|
XTRNDHLPIsL3TrendBullish(1)
|
|
//
|
|
)
|
|
//
|
|
;
|
|
|
|
//
|
|
bool signal1 =
|
|
//
|
|
isTrendSwitchedToBullish
|
|
//
|
|
;
|
|
|
|
//
|
|
result =
|
|
//
|
|
signal1
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool XTRNDHasShortCondition()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
XOHCL c1 = GetCandle(
|
|
_Symbol,
|
|
_Period,
|
|
1);
|
|
|
|
//
|
|
bool isTrendSwitchedToBearish =
|
|
//
|
|
(
|
|
//
|
|
XTRNDHLPIsL3TrendSwitchedBearish(1) &&
|
|
XTRNDHLPIsTrendBearish(1) &&
|
|
XTRNDHLPIsL1TrendBearish(1) &&
|
|
XTRNDHLPIsL2TrendBearish(1)
|
|
//
|
|
)
|
|
//
|
|
||
|
|
//
|
|
(
|
|
//
|
|
XTRNDHLPIsL2TrendSwitchedBearish(1) &&
|
|
XTRNDHLPIsTrendBearish(1) &&
|
|
XTRNDHLPIsL1TrendBearish(1) &&
|
|
XTRNDHLPIsL3TrendBearish(1) &&
|
|
XTRNDHLPIsTrendBearish(2) &&
|
|
XTRNDHLPIsL1TrendBearish(2) &&
|
|
XTRNDHLPIsL3TrendBearish(2)
|
|
//
|
|
)
|
|
//
|
|
||
|
|
//
|
|
(
|
|
//
|
|
XTRNDHLPIsL1TrendSwitchedBearish(1) &&
|
|
XTRNDHLPIsTrendBearish(1) &&
|
|
XTRNDHLPIsL2TrendBearish(1) &&
|
|
XTRNDHLPIsL3TrendBearish(1) &&
|
|
XTRNDHLPIsTrendBearish(2) &&
|
|
XTRNDHLPIsL2TrendBearish(2) &&
|
|
XTRNDHLPIsL3TrendBearish(2) &&
|
|
XTRNDHLPIsTrendBearish(3) &&
|
|
XTRNDHLPIsL2TrendBearish(3) &&
|
|
XTRNDHLPIsL3TrendBearish(3)
|
|
//
|
|
)
|
|
//
|
|
;
|
|
|
|
//
|
|
bool signal1 =
|
|
//
|
|
isTrendSwitchedToBearish
|
|
//
|
|
;
|
|
|
|
//
|
|
result =
|
|
//
|
|
signal1
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// XICHI ...
|
|
|
|
//
|
|
bool XICHIForceCloseAllShorts()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool XICHIForceCloseAllLongs()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool XICHIHasLongCondition()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
XOHCL c1 = GetCandle(
|
|
_Symbol,
|
|
_Period,
|
|
1);
|
|
XIchiInfo info1 = XICHIHLPGetInfo(1);
|
|
|
|
//
|
|
bool isKumoSwitchedToBullish =
|
|
//
|
|
XICHIHLPIsKumoSwitchedToBullish(1)
|
|
//
|
|
;
|
|
|
|
//
|
|
bool signal1 =
|
|
//
|
|
isKumoSwitchedToBullish &&
|
|
c1.low > info1.tenkanSen &&
|
|
info1.tenkanSen > info1.kijunSen &&
|
|
info1.kijunSen > MathMax(info1.senkouSpanA, info1.senkouSpanB)
|
|
//
|
|
;
|
|
|
|
//
|
|
result =
|
|
//
|
|
signal1
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool XICHIHasShortCondition()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
XOHCL c1 = GetCandle(
|
|
_Symbol,
|
|
_Period,
|
|
1);
|
|
XIchiInfo info1 = XICHIHLPGetInfo(1);
|
|
|
|
//
|
|
bool isKumoSwitchedToBearish =
|
|
//
|
|
XICHIHLPIsKumoSwitchedToBearish(1)
|
|
//
|
|
;
|
|
|
|
//
|
|
bool signal1 =
|
|
//
|
|
isKumoSwitchedToBearish &&
|
|
c1.high < info1.tenkanSen &&
|
|
info1.tenkanSen < info1.kijunSen &&
|
|
info1.kijunSen < MathMin(info1.senkouSpanA, info1.senkouSpanB)
|
|
//
|
|
;
|
|
|
|
//
|
|
result =
|
|
//
|
|
signal1
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// END Signal Provider Functions ...
|
|
// |