last ...
This commit is contained in:
@@ -4274,7 +4274,8 @@ public:
|
||||
;
|
||||
|
||||
//
|
||||
bool forceState = mSetups[i].ForceState();
|
||||
// bool forceState = mSetups[i].ForceState();
|
||||
bool forceState = mForce;
|
||||
|
||||
//
|
||||
if (!forceState)
|
||||
@@ -4885,8 +4886,16 @@ protected:
|
||||
Alert(message);
|
||||
|
||||
//
|
||||
mForce = true;
|
||||
|
||||
//
|
||||
EQMHandleInvalidSignal();
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
mForce = false;
|
||||
}
|
||||
|
||||
//
|
||||
bool executeOnBreakouts = ExecuteSignalsOnBreakout();
|
||||
@@ -4990,203 +4999,6 @@ protected:
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Private ...
|
||||
private:
|
||||
//
|
||||
// Props ...
|
||||
|
||||
//
|
||||
// Signals ...
|
||||
bool mAllowLong; // Allow Long
|
||||
bool mAllowShort; // Allow Short
|
||||
int mReuiredSignalVerifications; // Required Verifications for Validate Signals
|
||||
bool mExecuteSignalsOnBreakout; // Execute Signals On Breakouts
|
||||
bool mGetVerificationFromOtherTimeFrames; // Get Verifications from Other Time Frames
|
||||
|
||||
//
|
||||
// Risk Management ...
|
||||
double mVolume; // Volume
|
||||
double mTPPoint; // TP Point
|
||||
double mSLPoint; // SL Point
|
||||
bool mIgnoreTP; // Ignore Calculated TP
|
||||
bool mIgnoreSL; // Ignore Calculated SL
|
||||
int mMaxAllowedTrades; // Max Alloed Positions
|
||||
bool mUseMaxAllowedPerDirection; // Use Max Allowed Positions Per Direction
|
||||
bool mIncreaseNextSignalsVolume; // Increase Next Signals Volume
|
||||
double mIncreaseNextSignalsVolumeMultiplier; // Increase Next Signals Volume Multiplier
|
||||
bool mAcceptNextDirectionalSignalsWhenFirstInProfit; // Accept Same Symbol/Type Signal when Last in Profit
|
||||
|
||||
//
|
||||
// Signalling ...
|
||||
bool mCloseOnOpposit; // Close all Positions on Opposit
|
||||
int mEndSignallingHoure; // End Signalling at Specific Time
|
||||
int mCloseOnSpecificTime; // Close All Trades in Specific Time
|
||||
int mStartSignallingHoure; // Start Signalling at Specific Time
|
||||
|
||||
//
|
||||
// Force State:
|
||||
// we can do many things in force state:
|
||||
// - Prepare Force Hedging;
|
||||
// - Receive Signals with minimal Verifications;
|
||||
// - Increase Volume Size of in Profit Positions;
|
||||
// - etc ...
|
||||
// bool mForceState; // Determine in Force State or not
|
||||
double mMaxDrawdownForce; // Force Handling State on Drawdown for Guard
|
||||
int mDelayBetweenTwoSignal; // Delay between two same signal
|
||||
double mMinFreeMargingForOpenTrades; // Min Free Margin for Open Trades
|
||||
|
||||
//
|
||||
XTradeHandler *mTradeHandler; // Handle all Event which related to Signals and Positions
|
||||
|
||||
//
|
||||
// Apply Default Configurations ...
|
||||
void DefaultConfigs()
|
||||
{
|
||||
//
|
||||
// Signals ...
|
||||
AllowLong(false);
|
||||
AllowShort(false);
|
||||
ReuiredSignalVerifications(0);
|
||||
GetVerificationFromOtherTimeFrames(false);
|
||||
|
||||
//
|
||||
// Risk Management ...
|
||||
TPPoint(0);
|
||||
SLPoint(0);
|
||||
Volume(0.01);
|
||||
IgnoreTP(false);
|
||||
IgnoreSL(false);
|
||||
MaxAllowedTrades(0);
|
||||
|
||||
//
|
||||
// Signalling ...
|
||||
CloseOnOpposit(false);
|
||||
EndSignallingHoure(-1);
|
||||
CloseOnSpecificTime(-1);
|
||||
StartSignallingHoure(-1);
|
||||
|
||||
//
|
||||
// Trailling ...
|
||||
AllowTrailStop(false);
|
||||
NextTrailPoint(0);
|
||||
FirstTrailPoint(0);
|
||||
NextTrailDistance(0);
|
||||
FirstTrailDistance(0);
|
||||
|
||||
//
|
||||
// Supporting ...
|
||||
AllowSupport(false);
|
||||
MaxNumberOfSupports(0);
|
||||
SupportVolumeMultiplier(0.01);
|
||||
MaxAllowedSupportVolume(0.08);
|
||||
|
||||
//
|
||||
// Grid ...
|
||||
AllowGrid(false);
|
||||
GridDistance(0);
|
||||
MaxNumberOfGrids(0);
|
||||
GridVolumeMultiplier(0.01);
|
||||
MaxAllowedGridVolume(0.08);
|
||||
|
||||
//
|
||||
// Recovery ...
|
||||
AllowRecovery(false);
|
||||
MaxNumberOfRecoveries(0);
|
||||
RecoveryDistance(0);
|
||||
RecoveryVolumeMultiplier(0.01);
|
||||
MaxAllowedRecoveryVolume(0.08);
|
||||
|
||||
//
|
||||
SaveResults(false);
|
||||
SaveSignalsOnly(true);
|
||||
}
|
||||
|
||||
//
|
||||
XSCX121SetupCycles *mSetups[]; // Number of Setups
|
||||
|
||||
//
|
||||
// Tools ...
|
||||
int CountSetups()
|
||||
{
|
||||
return ArraySize(mSetups);
|
||||
}
|
||||
|
||||
//
|
||||
int FindSetupIndex(
|
||||
string symbol,
|
||||
ENUM_TIMEFRAMES period //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = -1;
|
||||
|
||||
//
|
||||
int count = CountSetups();
|
||||
if (!IsValidSize(count))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XSCX121SetupCycles *iSetup = mSetups[i];
|
||||
|
||||
//
|
||||
X121SetupInputs iInputs = iSetup.GetInputs();
|
||||
|
||||
//
|
||||
if (iInputs.symbol == symbol && iInputs.period == period)
|
||||
{
|
||||
//
|
||||
result = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int FindSetupIndex(
|
||||
string symbol //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = -1;
|
||||
|
||||
//
|
||||
int count = CountSetups();
|
||||
if (!IsValidSize(count))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XSCX121SetupCycles *iSetup = mSetups[i];
|
||||
|
||||
//
|
||||
X121SetupInputs iInputs = iSetup.GetInputs();
|
||||
|
||||
//
|
||||
if (iInputs.symbol == symbol)
|
||||
{
|
||||
//
|
||||
result = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// EQM Functions ...
|
||||
|
||||
@@ -5240,7 +5052,7 @@ private:
|
||||
}
|
||||
|
||||
//
|
||||
// Do Gridding Mechanism ...
|
||||
// Do All Protecting Mechanism ...
|
||||
void DoEQMProtect()
|
||||
{
|
||||
//
|
||||
@@ -5294,105 +5106,10 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Handle Force State Management ...
|
||||
bool mForce;
|
||||
void EQMHandleForceState(XSignal &forceSignals[])
|
||||
{
|
||||
//
|
||||
// Validate Force Marigin ...
|
||||
// double marigin = mTrader.mAccount.GetMargin();
|
||||
// double minFreeMarigin = MinFreeMargingForOpenTrades();
|
||||
// double forceMargin = 3 * minFreeMarigin; // TODO: Make It Configurable
|
||||
|
||||
//
|
||||
// Retrieving Positions ...
|
||||
// XPosition positions[];
|
||||
// int positionsCount = mTrader.GetPositions(positions);
|
||||
// if (!IsValidSize(positionsCount))
|
||||
// {
|
||||
// //
|
||||
// mForce = false;
|
||||
|
||||
// //
|
||||
// datetime cTime = TimeCurrent();
|
||||
// string message = "Exit From Force State: " + ToString(cTime);
|
||||
|
||||
// //
|
||||
// // Log(message);
|
||||
// return;
|
||||
// }
|
||||
|
||||
// //
|
||||
// XPosition oldest;
|
||||
// int oldestAge = GetOldest(
|
||||
// oldest,
|
||||
// positions //
|
||||
// );
|
||||
|
||||
// //
|
||||
// // Check Force State ...
|
||||
// bool isForce = marigin >= forceMargin && oldestAge >= 288;
|
||||
// if (!isForce)
|
||||
// {
|
||||
// //
|
||||
// if (mForce)
|
||||
// {
|
||||
// //
|
||||
// mForce = false;
|
||||
|
||||
// //
|
||||
// datetime cTime = TimeCurrent();
|
||||
// string message = "Exit From Force State: " + ToString(cTime);
|
||||
|
||||
// //
|
||||
// // Log(message);
|
||||
// }
|
||||
// return;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// mForce = true;
|
||||
// }
|
||||
|
||||
// //
|
||||
// // Prevent Moving Forward From Non Force State ...
|
||||
// if (!mForce)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// //
|
||||
// double minProfitPerTrade = MinProfitPerTrade();
|
||||
// double minProfitPerVolumeFactor = MinProfitPerVolumeFactor();
|
||||
|
||||
// //
|
||||
// double profit = SpecifiedCalculatePositionsProfit(positions);
|
||||
// double requiredProfit = SpecifiedCalculateRequiredProfitForHedge(
|
||||
// positions,
|
||||
// minProfitPerTrade,
|
||||
// minProfitPerVolumeFactor //
|
||||
// );
|
||||
|
||||
// //
|
||||
// XSymbolPositions symbolPositions[];
|
||||
// int symbolPositionsCount = ExtractSymbolPositions(
|
||||
// positions,
|
||||
// symbolPositions,
|
||||
// minProfitPerTrade,
|
||||
// minProfitPerVolumeFactor //
|
||||
// );
|
||||
// if (!IsValidSize(symbolPositionsCount))
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
|
||||
//
|
||||
// Log("symbolPositionsCount: " + ToString(symbolPositionsCount));
|
||||
}
|
||||
|
||||
//
|
||||
// Handle any Invalid Signals ...
|
||||
// this Signals passed From Request For Signal Function ...
|
||||
// these need to add to Trade Handler ....
|
||||
void EQMHandleInvalidSignal(
|
||||
XSignal &signal, // Invalid Signal
|
||||
int pushers, // Pushers
|
||||
@@ -5400,13 +5117,6 @@ private:
|
||||
X121SetupConditions &conditions[] // All Time Frames Conditions
|
||||
)
|
||||
{
|
||||
//
|
||||
// Check Force State ...
|
||||
// if (!ForceState())
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
|
||||
//
|
||||
int setupIDX = FindSetupIndex(signal.symbol);
|
||||
if (!IsValidIndex(setupIDX))
|
||||
@@ -5482,6 +5192,35 @@ private:
|
||||
}
|
||||
|
||||
//
|
||||
// When Margin not passed and Happens an Invalid Signal
|
||||
// HandleSignals Functions passed Signals to this Method ...
|
||||
// these Signals Added to Trade Handler Before ...
|
||||
void EQMHandleForceSignals(
|
||||
XSignal &signals[] //
|
||||
)
|
||||
{
|
||||
//
|
||||
if (!mForce)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
int count = ArraySize(signals);
|
||||
if (!IsValidSize(count))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// TODO:
|
||||
// Implement what we want ...
|
||||
}
|
||||
|
||||
//
|
||||
// Execute Signals which Provided through
|
||||
// EQM Protecting Senarios and must be Executed withouth
|
||||
// any Policies ...
|
||||
void EQMExecuteSignals(
|
||||
XSignal &signals[] //
|
||||
)
|
||||
@@ -5575,6 +5314,7 @@ private:
|
||||
}
|
||||
|
||||
//
|
||||
// Clear All Force States of Setups ...
|
||||
void EQMClearAllForceStates()
|
||||
{
|
||||
//
|
||||
@@ -5591,6 +5331,209 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Private ...
|
||||
private:
|
||||
//
|
||||
// Props ...
|
||||
|
||||
//
|
||||
// Signals ...
|
||||
bool mAllowLong; // Allow Long
|
||||
bool mAllowShort; // Allow Short
|
||||
int mReuiredSignalVerifications; // Required Verifications for Validate Signals
|
||||
bool mExecuteSignalsOnBreakout; // Execute Signals On Breakouts
|
||||
bool mGetVerificationFromOtherTimeFrames; // Get Verifications from Other Time Frames
|
||||
|
||||
//
|
||||
// Risk Management ...
|
||||
double mVolume; // Volume
|
||||
double mTPPoint; // TP Point
|
||||
double mSLPoint; // SL Point
|
||||
bool mIgnoreTP; // Ignore Calculated TP
|
||||
bool mIgnoreSL; // Ignore Calculated SL
|
||||
int mMaxAllowedTrades; // Max Alloed Positions
|
||||
bool mUseMaxAllowedPerDirection; // Use Max Allowed Positions Per Direction
|
||||
bool mIncreaseNextSignalsVolume; // Increase Next Signals Volume
|
||||
double mIncreaseNextSignalsVolumeMultiplier; // Increase Next Signals Volume Multiplier
|
||||
bool mAcceptNextDirectionalSignalsWhenFirstInProfit; // Accept Same Symbol/Type Signal when Last in Profit
|
||||
|
||||
//
|
||||
// Signalling ...
|
||||
bool mCloseOnOpposit; // Close all Positions on Opposit
|
||||
int mEndSignallingHoure; // End Signalling at Specific Time
|
||||
int mCloseOnSpecificTime; // Close All Trades in Specific Time
|
||||
int mStartSignallingHoure; // Start Signalling at Specific Time
|
||||
|
||||
//
|
||||
// Force State:
|
||||
// we can do many things in force state:
|
||||
// - Prepare Force Hedging;
|
||||
// - Receive Signals with minimal Verifications;
|
||||
// - Increase Volume Size of in Profit Positions;
|
||||
// - etc ...
|
||||
bool mForce; // Determine in Force State or not
|
||||
int mDelayBetweenTwoSignal; // Delay between two same signal
|
||||
double mMinFreeMargingForOpenTrades; // Min Free Margin for Open Trades
|
||||
|
||||
//
|
||||
XSCX121SetupCycles *mSetups[]; // Number of Setups
|
||||
XTradeHandler *mTradeHandler; // Handle all Event which related to Signals and Positions
|
||||
|
||||
//
|
||||
// Apply Default Configurations ...
|
||||
void DefaultConfigs()
|
||||
{
|
||||
//
|
||||
// Signals ...
|
||||
AllowLong(false);
|
||||
AllowShort(false);
|
||||
ReuiredSignalVerifications(0);
|
||||
GetVerificationFromOtherTimeFrames(false);
|
||||
|
||||
//
|
||||
// Risk Management ...
|
||||
TPPoint(0);
|
||||
SLPoint(0);
|
||||
Volume(0.01);
|
||||
IgnoreTP(false);
|
||||
IgnoreSL(false);
|
||||
MaxAllowedTrades(0);
|
||||
UseMaxAllowedPerDirection(false);
|
||||
IncreaseNextSignalsVolume(false);
|
||||
IncreaseNextSignalsVolumeMultiplier(1);
|
||||
AcceptNextDirectionalSignalsWhenFirstInProfit(false);
|
||||
|
||||
//
|
||||
// Signalling ...
|
||||
CloseOnOpposit(false);
|
||||
EndSignallingHoure(-1);
|
||||
CloseOnSpecificTime(-1);
|
||||
StartSignallingHoure(-1);
|
||||
|
||||
//
|
||||
// Trailling ...
|
||||
AllowTrailStop(false);
|
||||
NextTrailPoint(0);
|
||||
FirstTrailPoint(0);
|
||||
NextTrailDistance(0);
|
||||
FirstTrailDistance(0);
|
||||
|
||||
//
|
||||
// Supporting ...
|
||||
AllowSupport(false);
|
||||
MaxNumberOfSupports(0);
|
||||
SupportOnlyForces(false);
|
||||
SupportVolumeMultiplier(0.01);
|
||||
MaxAllowedSupportVolume(0.08);
|
||||
|
||||
//
|
||||
// Grid ...
|
||||
GridDistance(0);
|
||||
AllowGrid(false);
|
||||
MaxNumberOfGrids(0);
|
||||
GridOnlyForces(false);
|
||||
GridVolumeMultiplier(0.01);
|
||||
MaxAllowedGridVolume(0.08);
|
||||
|
||||
//
|
||||
// Recovery ...
|
||||
RecoveryDistance(0);
|
||||
AllowRecovery(false);
|
||||
MaxNumberOfRecoveries(0);
|
||||
RecoverOnlyForces(false);
|
||||
RecoveryVolumeMultiplier(0.01);
|
||||
MaxAllowedRecoveryVolume(0.08);
|
||||
|
||||
//
|
||||
SaveResults(false);
|
||||
SaveSignalsOnly(true);
|
||||
}
|
||||
|
||||
//
|
||||
// Tools ...
|
||||
int CountSetups()
|
||||
{
|
||||
return ArraySize(mSetups);
|
||||
}
|
||||
|
||||
//
|
||||
// Find Setup Index by Symbol and Period ...
|
||||
int FindSetupIndex(
|
||||
string symbol,
|
||||
ENUM_TIMEFRAMES period //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = -1;
|
||||
|
||||
//
|
||||
int count = CountSetups();
|
||||
if (!IsValidSize(count))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XSCX121SetupCycles *iSetup = mSetups[i];
|
||||
|
||||
//
|
||||
X121SetupInputs iInputs = iSetup.GetInputs();
|
||||
|
||||
//
|
||||
if (iInputs.symbol == symbol && iInputs.period == period)
|
||||
{
|
||||
//
|
||||
result = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Find Setup Index by Providing Symbol ...
|
||||
int FindSetupIndex(
|
||||
string symbol //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = -1;
|
||||
|
||||
//
|
||||
int count = CountSetups();
|
||||
if (!IsValidSize(count))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XSCX121SetupCycles *iSetup = mSetups[i];
|
||||
|
||||
//
|
||||
X121SetupInputs iInputs = iSetup.GetInputs();
|
||||
|
||||
//
|
||||
if (iInputs.symbol == symbol)
|
||||
{
|
||||
//
|
||||
result = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user