Files
MQL4Data/Bkp/UnUsed/Libs/x-saherelm.xma.signal.lib.mq4
T
2024-01-25 04:05:58 +03:30

1856 lines
50 KiB
Plaintext

///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL4 XMA Signal Library
// ---------------------------------------------------
// saherelm useful tools and definitions ...
//
//
// Maintainer:
// ------------
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
//
//////////////////////////////////////////////////////
#property library
#property copyright "Copyright 2023, SaherElm IT Center"
#property link "https://www.saherelm.ir"
#property version "1.00"
#property strict
//
// Includes Logger library ...
#include "../Libraries/x-saherelm.lib.mq4"
//
// Includes Models library ...
#include "../Libraries/x-saherelm.xma.models.lib.mq4"
//
// Includes Drawing library ...
#include "../Libraries/x-saherelm.draw.lib.mq4"
//
// START Global Requirement Functions ...
//
static int totalSignals = 0;
static int totalLongSignals = 0;
static int totalShortSignals = 0;
//
static double initialBalance = 0;
//
static double scTrendPower[];
static double scMinTrendPower = -1;
static double scMaxTrendPower = -1;
static datetime shortMarketCrossPointsTime[];
//
static double mcTrendPower[];
static double mcMaxTrendPower = -1;
static double mcMinTrendPower = -1;
static datetime mediumMarketCrossPointsTime[];
//
static double lcTrendPower[];
static double lcMaxTrendPower = -1;
static double lcMinTrendPower = -1;
static datetime longMarketCrossPointsTime[];
//
static double minMidInSC = -1;
static double maxMidInSC = -1;
//
//
// Retrieve and Calculate XMA State ...
XMAState GetXMAState(
const int bar_index, // Bar Index ...
//
// Market Length ...
const int marketLen, // Market Length ...
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
const int scFastMul, // Short Cycle Fast Multiplier ...
const int scSlowMul, // Short Cycle Slow Multiplier ...
const int mcFastMul, // Medium Cycle Fast Multiplier ...
const int mcSlowMul, // Medium Cycle Slow Multiplier ...
const int lcFastMul, // Long Cycle Fast Multiplier ...
const int lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
const bool showSC, // Show Short Cycle
const bool showSCCrossLines, // Show Short Cycle Vertical Lines
const bool showMC, // Show Medium Cycle
const bool showMCCrossLines, // Show Medium Cycle Vertical Lines
const bool showLC, // Show Long Cycle
const bool showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
const color sxFastColor, // Short Cycle Fast Color ...
const color scSlowColor, // Short Cycle Slow Color ...
const color mcFastColor, // Medium Cycle Fast Color ...
const color mcSlowColor, // Medium Cycle Slow Color ...
const color lcFastColor, // Medium Cycle Fast Color ...
const color lcSlowColor // Medium Cycle Slow Color ...
) {
//
// Temp Result ...
XMAState result = {};
//
// START Reading Buffers ...
//
//
// Define BufferIndexes ...
int scFastBufIndex = 0;
int scSlowBufIndex = 1;
int mcFastBufIndex = 2;
int mcSlowBufIndex = 3;
int lcFastBufIndex = 4;
int lcSlowBufIndex = 5;
int midBufIndex = 6;
//
// START Short Cycle ...
//
//
// Short Cycle Fast ...
double scFast = iCustom(
_Symbol,
_Period,
xmaIndicatorName,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
marketLen, // Market Length ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor, // Medium Cycle Slow Color ...
//
scFastBufIndex, // Buffer Index ...
bar_index
);
result.scFast = scFast;
//
// Short Cycle Previous Fast ...
double scFastPrev = iCustom(
_Symbol,
_Period,
xmaIndicatorName,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
marketLen, // Market Length ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor, // Medium Cycle Slow Color ...
//
scFastBufIndex, // Buffer Index ...
bar_index + 1
);
result.scFastPrev = scFastPrev;
//
// Short Cycle Slow ...
double scSlow = iCustom(
_Symbol,
_Period,
xmaIndicatorName,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
marketLen, // Market Length ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor, // Medium Cycle Slow Color ...
//
scSlowBufIndex, // Buffer Index ...
bar_index
);
result.scSlow = scSlow;
//
// Short Cycle Previous Slow ...
double scSlowPrev = iCustom(
_Symbol,
_Period,
xmaIndicatorName,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
marketLen, // Market Length ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor, // Medium Cycle Slow Color ...
//
scSlowBufIndex, // Buffer Index ...
bar_index + 1
);
result.scSlowPrev = scSlowPrev;
//
// END Short Cycle ...
//
//
// START Medium Cycle ...
//
//
// Medium Cycle Fast ...
double mcFast = iCustom(
_Symbol,
_Period,
xmaIndicatorName,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
marketLen, // Market Length ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor, // Medium Cycle Slow Color ...
//
mcFastBufIndex, // Buffer Index ...
bar_index
);
result.mcFast = mcFast;
//
// Medium Cycle Previous Fast ...
double mcFastPrev = iCustom(
_Symbol,
_Period,
xmaIndicatorName,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
marketLen, // Market Length ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor, // Medium Cycle Slow Color ...
//
mcFastBufIndex, // Buffer Index ...
bar_index + 1
);
result.mcFastPrev = mcFastPrev;
//
// Medium Cycle Slow ...
double mcSlow = iCustom(
_Symbol,
_Period,
xmaIndicatorName,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
marketLen, // Market Length ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor, // Medium Cycle Slow Color ...
//
mcSlowBufIndex, // Buffer Index ...
bar_index
);
result.mcSlow = mcSlow;
//
// Medium Cycle Previous Slow ...
double mcSlowPrev = iCustom(
_Symbol,
_Period,
xmaIndicatorName,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
marketLen, // Market Length ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor, // Medium Cycle Slow Color ...
//
mcSlowBufIndex, // Buffer Index ...
bar_index + 1
);
result.mcSlowPrev = mcSlowPrev;
//
// END Medium Cycle ...
//
//
// START Long Cycle ...
//
//
// Long Cycle Fast ...
double lcFast = iCustom(
_Symbol,
_Period,
xmaIndicatorName,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
marketLen, // Market Length ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor, // Medium Cycle Slow Color ...
//
lcFastBufIndex, // Buffer Index ...
bar_index
);
result.lcFast = lcFast;
//
// Long Cycle Previous Fast ...
double lcFastPrev = iCustom(
_Symbol,
_Period,
xmaIndicatorName,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
marketLen, // Market Length ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor, // Medium Cycle Slow Color ...
//
lcFastBufIndex, // Buffer Index ...
bar_index + 1
);
result.lcFastPrev = lcFastPrev;
//
// Long Cycle Slow ...
double lcSlow = iCustom(
_Symbol,
_Period,
xmaIndicatorName,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
marketLen, // Market Length ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor, // Medium Cycle Slow Color ...
//
lcSlowBufIndex, // Buffer Index ...
bar_index
);
result.lcSlow = lcSlow;
//
// Long Cycle Previous Slow ...
double lcSlowPrev = iCustom(
_Symbol,
_Period,
xmaIndicatorName,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
marketLen, // Market Length ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor, // Medium Cycle Slow Color ...
//
lcSlowBufIndex, // Buffer Index ...
bar_index + 1
);
result.lcSlowPrev = lcSlowPrev;
//
// END Long Cycle ...
//
//
// START Makret Middleage ...
//
//
// Market Middleage ...
double marketMiddleage = iCustom(
_Symbol,
_Period,
xmaIndicatorName,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
marketLen, // Market Length ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor, // Medium Cycle Slow Color ...
//
midBufIndex, // Buffer Index ...
bar_index
);
result.marketMiddleage = marketMiddleage;
//
// Previous Market Middleage ...
double marketMiddleagePrev = iCustom(
_Symbol,
_Period,
xmaIndicatorName,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
marketLen, // Market Length ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor, // Medium Cycle Slow Color ...
//
midBufIndex, // Buffer Index ...
bar_index + 1
);
result.marketMiddleagePrev = marketMiddleagePrev;
//
// END Makret Middleage ...
//
//
// END Reading Buffers ...
//
//
// START Calculating ...
//
//
datetime currentTime = iTime(
_Symbol,
_Period,
bar_index
);
//
// Short Cycle ...
bool isSCFastCrossOverSlow = scFast > scSlow
&& !(scFastPrev > scSlowPrev);
result.isSCFastCrossOverSlow = isSCFastCrossOverSlow;
//
bool isSCFastCrossUnderSlow = scFast < scSlow
&& !(scFastPrev < scSlowPrev);
result.isSCFastCrossUnderSlow = isSCFastCrossUnderSlow;
//
bool isSCTrendUp = scFast > scSlow &&
scFastPrev > scSlowPrev;
result.isSCTrendUp = isSCTrendUp;
//
bool isSCTrendDown = !isSCTrendUp
&& scFast < scSlow
&& scFastPrev < scSlowPrev;
result.isSCTrendDown = isSCTrendDown;
//
// Fill Cycle Min/Max Trend Powers ...
double scTrendPowerCurrent = MathAbs(scFast - scSlow);
ArrayResize(
scTrendPower,
ArraySize(scTrendPower) + 1
);
scTrendPower[0] = scTrendPowerCurrent;
if (scTrendPowerCurrent > scMaxTrendPower) {
scMaxTrendPower = scTrendPowerCurrent;
}
if (
scMinTrendPower < 0 ||
scTrendPowerCurrent < scMinTrendPower) {
scMinTrendPower = scTrendPowerCurrent;
}
//
// Fill Time Series ...
if (
isSCFastCrossOverSlow
|| isSCFastCrossUnderSlow
) {
//
// Increase Array Size ...
ArrayResize(
shortMarketCrossPointsTime,
ArraySize(shortMarketCrossPointsTime) + 1
);
//
shortMarketCrossPointsTime[0] = currentTime;
//
scMinTrendPower = -1;
scMaxTrendPower = -1;
}
//
// Medium Cycle ...
bool isMCFastCrossOverSlow = mcFast > mcSlow
&& !(mcFastPrev > mcSlowPrev);
result.isMCFastCrossOverSlow = isMCFastCrossOverSlow;
//
bool isMCFastCrossUnderSlow = mcFast < mcSlow
&& !(mcFastPrev < mcSlowPrev);
result.isMCFastCrossUnderSlow = isMCFastCrossUnderSlow;
//
bool isMCTrendUp = mcFast > mcSlow &&
mcFastPrev > mcSlowPrev;
result.isMCTrendUp = isMCTrendUp;
//
bool isMCTrendDown = !isMCTrendUp
&& mcFast < mcSlow
&& mcFastPrev < mcSlowPrev;
result.isMCTrendDown = isMCTrendDown;
//
// Fill Cycle Min/Max Trend Powers ...
double mcTrendPowerCurrent = MathAbs(mcFast - mcSlow);
ArrayResize(
mcTrendPower,
ArraySize(mcTrendPower) + 1
);
mcTrendPower[bar_index] = mcTrendPowerCurrent;
if (mcTrendPowerCurrent > mcMaxTrendPower) {
mcMaxTrendPower = mcTrendPowerCurrent;
}
if (
mcMinTrendPower < 0 ||
mcTrendPowerCurrent < mcMinTrendPower) {
mcMinTrendPower = mcTrendPowerCurrent;
}
//
// Fill Time Series ...
if (
isMCFastCrossOverSlow
|| isMCFastCrossUnderSlow
) {
//
// Increase Array Size ...
ArrayResize(
mediumMarketCrossPointsTime,
ArraySize(mediumMarketCrossPointsTime) + 1
);
//
mediumMarketCrossPointsTime[0] = currentTime;
//
mcMinTrendPower = -1;
mcMaxTrendPower = -1;
}
//
// Long Cycle ...
bool isLCFastCrossOverSlow = lcFast > lcSlow
&& !(lcFastPrev > lcSlowPrev);
result.isLCFastCrossOverSlow = isLCFastCrossOverSlow;
//
bool isLCFastCrossUnderSlow = lcFast < lcSlow
&& !(lcFastPrev < lcSlowPrev);
result.isLCFastCrossUnderSlow = isLCFastCrossUnderSlow;
//
bool isLCTrendUp = lcFast > lcSlow &&
lcFastPrev > lcSlowPrev;
result.isLCTrendUp = isLCTrendUp;
//
bool isLCTrendDown = !isLCTrendUp
&& lcFast < lcSlow
&& lcFastPrev < lcSlowPrev;
result.isLCTrendDown = isLCTrendDown;
//
// Fill Cycle Min/Max Trend Powers ...
double lcTrendPowerCurrent = MathAbs(mcFast - mcSlow);
ArrayResize(
lcTrendPower,
ArraySize(lcTrendPower) + 1
);
lcTrendPower[bar_index] = lcTrendPowerCurrent;
if (lcTrendPowerCurrent > lcMaxTrendPower) {
lcMaxTrendPower = lcTrendPowerCurrent;
}
if (
lcMinTrendPower < 0 ||
lcTrendPowerCurrent < lcMinTrendPower) {
lcMinTrendPower = lcTrendPowerCurrent;
}
//
// Fill Time Series ...
if (
isLCFastCrossOverSlow
|| isLCFastCrossUnderSlow
) {
//
// Increase Array Size ...
ArrayResize(
longMarketCrossPointsTime,
ArraySize(longMarketCrossPointsTime) + 1
);
//
longMarketCrossPointsTime[0] = currentTime;
//
lcMinTrendPower = -1;
lcMaxTrendPower = -1;
}
//
// Reset MinMid and MaxMid ...
if (
isSCFastCrossOverSlow ||
isSCFastCrossUnderSlow
) {
//
minMidInSC = -1;
maxMidInSC = -1;
}
//
// Find Hottest Area ...
//
bool isHottestCrossOver = isSCFastCrossOverSlow
&& isMCFastCrossOverSlow
&& isLCFastCrossOverSlow;
result.isHottestCrossOver = isHottestCrossOver;
//
bool isHotCrossOver = !isHottestCrossOver
&& isSCFastCrossOverSlow
&& isMCFastCrossOverSlow;
result.isHotCrossOver = isHotCrossOver;
//
bool isHottestCrossUnder = isSCFastCrossUnderSlow
&& isMCFastCrossUnderSlow
&& isLCFastCrossUnderSlow;
result.isHottestCrossUnder = isHottestCrossUnder;
//
bool isHotCrossUnder = !isHottestCrossUnder
&& isMCFastCrossUnderSlow
&& isLCFastCrossUnderSlow;
result.isHotCrossUnder = isHotCrossUnder;
//
// END Calculating ...
//
//
// START Calculate Signal ...
//
//
// Long:
// Entry:
// - prev candle open below Mid line ...
// - current candle price above Mid Line ...
// SL:
// - prev candle High ...
// Exit:
// - r2r 1.5
// - close < mid ...
//
// Short:
// Entry:
// - prev candle open above Mid Line ...
// - current candle price below Mid Line
// SL:
// - prev candle Low ...
// Exit:
// - r2r 1.5
// - close > mid
//
RefreshRates();
//
double prevCandleOpen = iOpen(
_Symbol,
_Period,
bar_index + 1
);
//
double prevCandleHigh = iHigh(
_Symbol,
_Period,
bar_index + 1
);
//
double prevCandleLow = iLow(
_Symbol,
_Period,
bar_index + 1
);
//
// LONG Prices ...
double longEntryPrice = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double longClosePrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double longPriceGap = longClosePrice - longEntryPrice;
//
// SHORT Prices ...
double shortEntryPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double shortClosePrice = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double shortPriceGap = shortEntryPrice - shortClosePrice;
//
bool hasLongSignal =
true
&& isSCTrendDown
&& marketMiddleage > minMidInSC
&& prevCandleOpen < marketMiddleage
&& longEntryPrice > marketMiddleage
;
result.hasLongSignal = hasLongSignal;
//
bool hasShortSignal =
true
&& isSCTrendUp
&& marketMiddleage < maxMidInSC
&& prevCandleOpen > marketMiddleage
&& shortEntryPrice < marketMiddleage;
result.hasShortSignal = hasShortSignal;
//
bool hasSignal = hasLongSignal || hasShortSignal;
result.hasSignal = hasSignal;
//
// END Calculate Signal ...
//
//
return result;
}
//
// END Global Requirement Functions ...
//
//
// START Signal Related Functions ...
//
//
// Calculate Signal ...
// in this function we calculate a signal exists in
// specific bar or not ...
XSignalRequest CalculateSignal(
const int bar_index, // Bar Index ...
//
// Market Length ...
const int marketLen, // Market Length ...
//
// Risk To Reward Ratio ...
const double r2r,
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
const int scFastMul, // Short Cycle Fast Multiplier ...
const int scSlowMul, // Short Cycle Slow Multiplier ...
const int mcFastMul, // Medium Cycle Fast Multiplier ...
const int mcSlowMul, // Medium Cycle Slow Multiplier ...
const int lcFastMul, // Long Cycle Fast Multiplier ...
const int lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
const bool showSC, // Show Short Cycle
const bool showSCCrossLines, // Show Short Cycle Vertical Lines
const bool showMC, // Show Medium Cycle
const bool showMCCrossLines, // Show Medium Cycle Vertical Lines
const bool showLC, // Show Long Cycle
const bool showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
const color sxFastColor, // Short Cycle Fast Color ...
const color scSlowColor, // Short Cycle Slow Color ...
const color mcFastColor, // Medium Cycle Fast Color ...
const color mcSlowColor, // Medium Cycle Slow Color ...
const color lcFastColor, // Medium Cycle Fast Color ...
const color lcSlowColor // Medium Cycle Slow Color ...
) {
//
// create temp result ...
XSignalRequest result = {};
result.hasSignal = false;
result.type = X_NONE;
//
XSignal signal = {};
//
// Get Fully XMA Indicator State ...
XMAState state = GetXMAState(
//
// Bar Index ...
bar_index, // Bar Index ...
//
// Market Length ...
marketLen, // Market Length ...
//
// XMA Inputs ...
//
// Market Specification Inpouts ...
scFastMul, // Short Cycle Fast Multiplier ...
scSlowMul, // Short Cycle Slow Multiplier ...
mcFastMul, // Medium Cycle Fast Multiplier ...
mcSlowMul, // Medium Cycle Slow Multiplier ...
lcFastMul, // Long Cycle Fast Multiplier ...
lcSlowMul, // Long Cycle Slow Multiplier ...
//
// Show/Hide Inputs ...
showSC, // Show Short Cycle
showSCCrossLines, // Show Short Cycle Vertical Lines
showMC, // Show Medium Cycle
showMCCrossLines, // Show Medium Cycle Vertical Lines
showLC, // Show Long Cycle
showLCCrossLines, // Show Long Cycle Vertical Lines
//
// Color Inputs ...
sxFastColor, // Short Cycle Fast Color ...
scSlowColor, // Short Cycle Slow Color ...
mcFastColor, // Medium Cycle Fast Color ...
mcSlowColor, // Medium Cycle Slow Color ...
lcFastColor, // Medium Cycle Fast Color ...
lcSlowColor // Medium Cycle Slow Color ...
);
//
if (!state.hasSignal) {
//
result.signal = signal;
return result;
}
//
totalSignals++;
//
// Define Price Related Variables ...
//
double price = 0;
double priceGap;
double sl = 0;
double risk;
double reward;
double tp = 0;
double xmaRiskToReward = r2r;
datetime time = iTime(
_Symbol,
_Period,
bar_index
);
//
RefreshRates();
//
double prevCandleOpen = iOpen(
_Symbol,
_Period,
bar_index + 1
);
//
double prevCandleHigh = iHigh(
_Symbol,
_Period,
bar_index + 1
);
//
double prevCandleLow = iLow(
_Symbol,
_Period,
bar_index + 1
);
//
// LONG Prices ...
double longEntryPrice = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double longClosePrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double longPriceGap = longClosePrice - longEntryPrice;
//
// SHORT Prices ...
double shortEntryPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double shortClosePrice = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double shortPriceGap = shortEntryPrice - shortClosePrice;
//
// Fill Signal Related Variables ...
if (state.hasLongSignal) {
//
totalLongSignals++;
//
price = longEntryPrice;
priceGap = longPriceGap;
//
sl = prevCandleLow;
//
risk = price - sl;
reward = risk * xmaRiskToReward;
tp = price + reward;
} else if (state.hasShortSignal) {
//
totalShortSignals++;
//
price = shortEntryPrice;
priceGap = shortPriceGap;
//
sl = prevCandleHigh;
//
risk = sl - price;
reward = risk * xmaRiskToReward;
tp = price - reward;
}
//
// Normalize Prices ...
price = NormalizeDouble(price, _Digits);
sl = NormalizeDouble(sl, _Digits);
tp = NormalizeDouble(tp, _Digits);
//
// Generate Signal Structure ...
signal.type = state.hasLongSignal ?
X_LONG :
X_SHORT;
signal.tp = tp;
signal.sl = 0; // sl;
signal.time = time;
signal.symbol = _Symbol;
signal.entryPrice = price;
signal.id = totalLongSignals;
//
// Fill Result ...
result.hasSignal = state.hasSignal;
result.signal = signal;
result.type = signal.type;
//
return result;
}
//
// Retrieve Signal Bar Index ...
int GetSignalBarIndex(XSignal &signal) {
//
// Temp Result ...
int result = -1;
//
// Retriev Signal Bar Index ...
result = iBarShift(
_Symbol,
_Period,
signal.time
);
//
return result;
}
//
// Generate a Unique ID for Signal ...
string GenerateSignalTAG(
const XSignal &signal,
const string tag,
const string longSignalLabel,
const string shortSignalLabel
) {
//
// Generate Propper Label for Signal ...
string label = signal.type == X_LONG ? longSignalLabel : signal.type == X_SHORT ? shortSignalLabel : "UN_KNOWN";
//
// Generate Unique String Identifier for Signal ...
string result = tag +
"_[ID:" + IntegerToString(signal.id) + "]" +
"_[" + label + "]" +
"_[" + signal.symbol + "]" +
"_[Time:" + TimeToStr(signal.time) + "]" +
"_[TP:" + DoubleToString(signal.tp) + "]" +
"_[SL:" + DoubleToString(signal.sl) + "]";
//
return result;
}
//
// Draw Signal Shapes on Chart ...
bool DrawSignal(
const XSignal &signal,
long chartID = 0,
int subWindowID = 0,
const double positionThresholdFactor = 10,
string signalTag = "X-Signal",
string longSignalLabel = "X-Long",
color longSignalColor = clrAqua,
string shortSignalLabel = "X-Short",
color shortSignalColor = clrFuchsia
) {
//
// Generate isLongSignal Var ...
bool isLongSignal = signal.type == X_LONG;
//
// Signal Bar Index ...
int bar_index = iBarShift(
_Symbol,
_Period,
signal.time
);
//
// START Draw Signal Arrow ...
//
//
// Arrow Shape Name ...
string arrowName = StringConcatenate(signalTag, "_Arrow_", signal.id);
//
// Arrow Price ...
double arrowPrice = 0;
if (isLongSignal) {
//
arrowPrice = iLow(
_Symbol,
_Period,
bar_index
);
//
arrowPrice = arrowPrice - (positionThresholdFactor * _Point);
} else {
//
arrowPrice = iHigh(
_Symbol,
_Period,
bar_index
);
//
arrowPrice = arrowPrice + (positionThresholdFactor * _Point);
}
//
// Arrow Code ...
uchar arrowCode = isLongSignal ? SYMBOL_ARROWUP : SYMBOL_ARROWDOWN;
//
// Arrow Anchor Point ...
ENUM_ARROW_ANCHOR arrowAnchorPoint = isLongSignal ? ANCHOR_BOTTOM : ANCHOR_TOP;
//
// Arrow Color ...
color arrowColor = isLongSignal ? longSignalColor : shortSignalColor;
//
// Draw Signal Arrow Shape ...
bool result = DrawArrow(
chartID,
arrowName,
subWindowID,
signal.time,
arrowPrice,
arrowCode,
arrowAnchorPoint,
arrowColor,
STYLE_SOLID,
3,
false,
false,
false,
0
);
//
// END Draw Signal Arrow ...
//
//
// START Draw Signal SL/TP ...
//
string slLineName = StringConcatenate(signalTag, "_SL_", signal.id);
string tpLineName = StringConcatenate(signalTag, "_TP_", signal.id);
string entryLineName = StringConcatenate(signalTag, "_ENTRY_", signal.id);
//
color slColor = shortSignalColor; // isLongSignal ? shortSignalColor : longSignalColor;
color tpColor = longSignalColor; // isLongSignal ? shortSignalColor : longSignalColor;
color entryColor = clrGreen;
//
datetime time1 = iTime(
_Symbol,
_Period,
bar_index + 1
);
//
// Draw Enrty Price ...
result = DrawTrendLine(
chartID,
entryLineName,
subWindowID,
time1,
signal.entryPrice,
signal.time,
signal.entryPrice,
entryColor,
STYLE_SOLID,
2
);
//
// Draw Signal SL ...
if (signal.sl > 0) {
//
result = DrawTrendLine(
chartID,
slLineName,
subWindowID,
time1,
signal.sl,
signal.time,
signal.sl,
slColor,
STYLE_SOLID,
2
);
}
//
// Draw Signal TP ...
if (signal.tp > 0) {
//
result = DrawTrendLine(
chartID,
tpLineName,
subWindowID,
time1,
signal.tp,
signal.time,
signal.tp,
tpColor,
STYLE_SOLID,
2
);
}
//
// END Draw Signal SL/TP ...
//
//
// Start Draw Signal Label ...
//
//
string labelName = StringConcatenate(signalTag, "_Label_", signal.id);
//
double labelPrice = isLongSignal ? arrowPrice - (positionThresholdFactor * _Point) : arrowPrice + (positionThresholdFactor * _Point);
//
string labelText = isLongSignal ? longSignalLabel : shortSignalLabel;
//
result = DrawText(
chartID,
labelName,
subWindowID,
signal.time,
labelPrice,
labelText,
"Arial",
10,
arrowColor,
0,
ANCHOR_CENTER
);
//
// End Draw Signal Label ...
//
//
return result;
}
//
// Trade on Specific Signal ...
bool TradeSignal(
XSignal &signal,
//
string prefix,
//
double volumePercent,
//
// Long ...
const string longSignalLabel,
const color longSignalColor,
//
// Short ...
const string shortSignalLabel,
const color shortSignalColor
) {
//
// Temp Result ...
bool result = false;
//
if (initialBalance == 0) {
initialBalance = AccountInfoDouble(ACCOUNT_BALANCE);
}
//
double balance = AccountInfoDouble(ACCOUNT_BALANCE);
int openPositions = CountOpenTrades();
double volume = (volumePercent * initialBalance);
// openPositions == 0 ?
// (volumePercent * balance) :
// (volumePercent * initialBalance);
//
if (
signal.type != X_LONG &&
signal.type != X_SHORT
) {
return result;
}
//
bool hasLongSignal = signal.type == X_LONG;
//
// Check TP and Entry Price ...
if (
(
hasLongSignal
&& signal.entryPrice > signal.tp
) ||
(
!hasLongSignal
&& signal.entryPrice < signal.tp
)
) {
return result;
}
//
// Order Operation ...
int operation = hasLongSignal ?
OP_BUY :
OP_SELL;
//
// Detect Trade Color ...
color clr = hasLongSignal ?
longSignalColor :
shortSignalColor;
//
// Generate Signal Comment ...
string label = hasLongSignal ?
longSignalLabel :
shortSignalLabel;
//
// Generate Signal Comment ...
string comment = StringConcatenate(
prefix,
"_", signal.id, "_",
label
);
//
// Placing Order ...
int orderTicket = OrderSend(
_Symbol,
operation,
volume,
signal.entryPrice,
3,
signal.sl,
signal.tp,
comment,
signal.id,
0,
clr
);
//
// Draw Signal Shape if Order Opened Successfully ...
if (orderTicket >= 0) {
//
// Here i must to Draw Signal Shapes ...
DrawSignal(
signal,
0,
0,
50,
prefix, // Signal Tag ...
longSignalLabel, // Long Signal Label ...
longSignalColor,
shortSignalLabel, // Short Signal Label ...
shortSignalColor
);
//
result = true;
}
//
return result;
}
//
// END Signal Related Functions ...
//
//
// START Orders Functions ...
//
//
// Convert To XSignal Model ...
XSignal OrderToSignal() {
//
// Temp Result ...
XSignal result = {};
result.type = X_NONE;
//
// Here we can get some usefull info based on selected order ...
double swap = OrderSwap();
double lots = OrderLots();
int ticket = OrderTicket();
double profit = OrderProfit();
double stopLoss = OrderStopLoss();
double openPrice = OrderOpenPrice();
datetime openTime = OrderOpenTime();
int magicNumber = OrderMagicNumber();
double takeProfit = OrderTakeProfit();
//
// find order type ...
bool isLongOrder = OrderType() == OP_BUY;
//
// Conver Position to Signal ...
result.sl = stopLoss;
result.tp = takeProfit;
result.time = openTime;
result.symbol = _Symbol;
result.id = magicNumber;
result.entryPrice = openPrice;
result.type = isLongOrder ? X_LONG : X_SHORT;
//
return result;
}
//
// START Count Orders ...
//
//
// Count Open Positions ...
int CountOpenTrades() {
//
int result = 0;
//
// Loop through Orders ...
for (int i = 0; i < OrdersTotal(); i++) {
//
// Select indexed Order ...
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
//
// Check Order ...
if (OrderSymbol() == _Symbol) {
result++;
}
}
}
//
// Return Result ...
return result;
}
//
// Count Open Long Positions ...
int CountOpenLongTrades() {
//
int result = 0;
//
// Loop through Orders ...
for (int i = 0; i < OrdersTotal(); i++) {
//
// Select indexed Order ...
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
//
// Check Order ...
if (
OrderSymbol() == _Symbol
&& OrderType() == OP_BUY
) {
result++;
}
}
}
//
// Return Result ...
return result;
}
//
// Count Open Short Positions ...
int CountOpenShortTrades() {
//
int result = 0;
//
// Loop through Orders ...
for (int i = 0; i < OrdersTotal(); i++) {
//
// Select indexed Order ...
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
//
// Check Order ...
if (
OrderSymbol() == _Symbol
&& OrderType() == OP_SELL
) {
result++;
}
}
}
//
// Return Result ...
return result;
}
//
// END Count Orders ...
//
//
// START Close Orders ...
//
//
// Close All Open Trades ...
void CloseAllTrades() {
//
// Loop through all Positions ...
for (int i = OrdersTotal(); i >= 0; i--) {
//
// Check Order Selected or not ...
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
//
// Check Order Symbol is same as Current Symbol ...
if (OrderSymbol() == _Symbol) {
//
double lots = OrderLots();
int ticket = OrderTicket();
//
// find order type ...
bool isLongOrder = OrderType() == OP_BUY;
//
// find close price ...
double closePrice = isLongOrder ?
SymbolInfoDouble(_Symbol, SYMBOL_BID) :
SymbolInfoDouble(_Symbol, SYMBOL_ASK);
//
// Since because of equity ...
// we have to ckose allpositions ...
bool isOrderClosed = OrderClose(
ticket,
lots,
closePrice,
clrYellow
);
}
}
}
}
//
// Close All Open Long Trades ...
void CloseAllLongTrades() {
//
// Loop through all Positions ...
for (int i = OrdersTotal(); i >= 0; i--) {
//
// Check Order Selected or not ...
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
//
// Check Order Symbol is same as Current Symbol ...
if (OrderSymbol() == _Symbol) {
//
double lots = OrderLots();
int ticket = OrderTicket();
//
// find order type ...
bool isLongOrder = OrderType() == OP_BUY;
if (isLongOrder) {
//
// find close price ...
double closePrice = isLongOrder ?
SymbolInfoDouble(_Symbol, SYMBOL_BID) :
SymbolInfoDouble(_Symbol, SYMBOL_ASK);
//
// Since because of equity ...
// we have to ckose allpositions ...
bool isOrderClosed = OrderClose(
ticket,
lots,
closePrice,
clrYellow
);
}
}
}
}
}
//
// Close All Open Short Trades ...
void CloseAllShortTrades() {
//
// Loop through all Positions ...
for (int i = OrdersTotal(); i >= 0; i--) {
//
// Check Order Selected or not ...
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
//
// Check Order Symbol is same as Current Symbol ...
if (OrderSymbol() == _Symbol) {
//
double lots = OrderLots();
int ticket = OrderTicket();
//
// find order type ...
bool isLongOrder = OrderType() == OP_BUY;
if (!isLongOrder) {
//
// find close price ...
double closePrice = isLongOrder ?
SymbolInfoDouble(_Symbol, SYMBOL_BID) :
SymbolInfoDouble(_Symbol, SYMBOL_ASK);
//
// Since because of equity ...
// we have to ckose allpositions ...
bool isOrderClosed = OrderClose(
ticket,
lots,
closePrice,
clrYellow
);
}
}
}
}
}
//
// END Close Orders ...
//
//
// END Orders Functions ...
//