Add Opposit Signal Generator Function in XSignal Structure ...
This commit is contained in:
@@ -1467,7 +1467,8 @@ struct XOHCL
|
||||
// Candlestic Tools ...
|
||||
|
||||
//
|
||||
bool IsDoji() {
|
||||
bool IsDoji()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
@@ -1475,7 +1476,8 @@ struct XOHCL
|
||||
// Validate Content and Ignore 0 Bar
|
||||
// since it is not Completed ...
|
||||
result = IsValid() && Index() > 0;
|
||||
if (!result) {
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -2919,6 +2921,37 @@ bool IsShort(ENUM_ORDER_TYPE type)
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Retrieve Opposit Direction Type ...
|
||||
ENUM_POSITION_TYPE GetOpposit(ENUM_POSITION_TYPE type)
|
||||
{
|
||||
//
|
||||
ENUM_POSITION_TYPE result = NULL;
|
||||
|
||||
//
|
||||
bool isLong = IsLong(type);
|
||||
result = isLong
|
||||
? POSITION_TYPE_SELL
|
||||
: POSITION_TYPE_BUY;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
ENUM_ORDER_TYPE GetOpposit(ENUM_ORDER_TYPE type)
|
||||
{
|
||||
//
|
||||
ENUM_ORDER_TYPE result = NULL;
|
||||
|
||||
//
|
||||
bool isLong = IsLong(type);
|
||||
result = isLong
|
||||
? ORDER_TYPE_SELL
|
||||
: ORDER_TYPE_BUY;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Check Expert Running in Testing Mode or not ...
|
||||
bool IsRunningOnTestMode()
|
||||
|
||||
@@ -637,6 +637,73 @@ struct XSignal
|
||||
//
|
||||
// Tools ...
|
||||
|
||||
//
|
||||
// Generate Opposit Direction ...
|
||||
bool GenerateOpposit(
|
||||
XSignal &mSignal // Oppsoit Signal
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
ENUM_POSITION_TYPE mType = GetOpposit(this.type);
|
||||
double mEntry = GetExit(this.symbol, mType);
|
||||
|
||||
//
|
||||
bool isLong = IsLong(mType);
|
||||
|
||||
//
|
||||
double mTP = 0;
|
||||
this.RegularTP(mTP);
|
||||
|
||||
//
|
||||
double mSL = 0;
|
||||
this.RegularSL(mSL);
|
||||
|
||||
//
|
||||
// Calculate Risk Reward Ratio ...
|
||||
double risk = MathAbs(this.entry - mSL);
|
||||
double reward = MathAbs(this.entry - mTP);
|
||||
|
||||
//
|
||||
double r2r = reward / risk;
|
||||
|
||||
//
|
||||
mSL = isLong
|
||||
? mEntry - risk
|
||||
: mEntry + risk;
|
||||
|
||||
//
|
||||
mTP = isLong
|
||||
? mEntry + reward
|
||||
: mEntry - reward;
|
||||
|
||||
//
|
||||
result = mSignal.Prepare(
|
||||
this.symbol,
|
||||
this.provider,
|
||||
this.period,
|
||||
mType,
|
||||
this.mode,
|
||||
mEntry,
|
||||
this.volume,
|
||||
this.action,
|
||||
mSL,
|
||||
mTP //
|
||||
);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Cleanup ...
|
||||
void Clean()
|
||||
|
||||
Reference in New Issue
Block a user