Harden HIT entry and manager state handling
This commit is contained in:
@@ -134,7 +134,6 @@ ulong slippage = 10;
|
||||
//--- 主要な定数・設定
|
||||
#define POSITION_LIMIT 48
|
||||
#define ENTRY_H1_LIMIT 2 // H1本数(=2時間)
|
||||
#define CLOSE_H1_LIMIT 12 // H1本数(=12時間)
|
||||
#define HISTORY_BARS 72
|
||||
#define OHLC_START_SHIFT 1 // 1: 確定足のみをPythonへ渡す
|
||||
#define M15_CONFIRM_BARS 30
|
||||
@@ -375,6 +374,17 @@ void ConfigurePythonGatewayPaths()
|
||||
Print("Python app dir: ", python_app_dir);
|
||||
}
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| |
|
||||
//+------------------------------------------------------------------+
|
||||
/**
|
||||
* @brief The split entry/manager design requires ticket-based hedging positions.
|
||||
*/
|
||||
bool IsHedgingAccount()
|
||||
{
|
||||
return (AccountInfoInteger(ACCOUNT_MARGIN_MODE) == ACCOUNT_MARGIN_MODE_RETAIL_HEDGING);
|
||||
}
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| 起動時の処理
|
||||
//+------------------------------------------------------------------+
|
||||
@@ -391,6 +401,13 @@ int OnInit()
|
||||
magic_number = input_entry_magic_number;
|
||||
slippage = input_slippage_points;
|
||||
|
||||
if(!IsHedgingAccount())
|
||||
{
|
||||
Print("HITEntryEA requires a retail hedging account. account_margin_mode=",
|
||||
AccountInfoInteger(ACCOUNT_MARGIN_MODE));
|
||||
return INIT_FAILED;
|
||||
}
|
||||
|
||||
ConfigurePythonGatewayPaths();
|
||||
|
||||
PrepareDoneFileOnInit(done_trend_file, running_trend_file, "trend");
|
||||
@@ -459,6 +476,11 @@ void OnTick()
|
||||
// H1新バーまたは初回起動時に、エントリー価格生成用Pythonを起動する。
|
||||
ProcessEntryUpdate(g_ea);
|
||||
|
||||
// Read completed H1 results before spread gating so stale split orders and state updates are not delayed.
|
||||
bool entry_result_ready = IsEntryResultReady();
|
||||
if(entry_result_ready)
|
||||
RefreshTargetPrices(g_ea);
|
||||
|
||||
// M15確定足ごとに、H1候補価格を発注してよいタイミングか再判定する。
|
||||
ProcessM15EntryTimingUpdate();
|
||||
|
||||
@@ -468,10 +490,9 @@ void OnTick()
|
||||
if(!IsSpreadAllowed(ctx))
|
||||
return;
|
||||
|
||||
if(!IsEntryResultReady())
|
||||
if(!entry_result_ready)
|
||||
return;
|
||||
|
||||
RefreshTargetPrices(g_ea);
|
||||
ProcessEntryDecisionIfNeeded(g_ea, ctx);
|
||||
}
|
||||
|
||||
|
||||
@@ -94,8 +94,6 @@ void LoadSLTPInputSettings(SLTPManagerPanelSettings &settings)
|
||||
bool ApplySLTPSettings(const SLTPManagerPanelSettings &settings,
|
||||
const bool print_summary)
|
||||
{
|
||||
g_sltp_settings_valid = false;
|
||||
|
||||
g_sltp_manager.SetMagicNumber((ulong)input_managed_magic_number);
|
||||
g_sltp_manager.SetSymbol(_Symbol);
|
||||
g_sltp_manager.SetDeviationInPoints(input_slippage_points);
|
||||
@@ -111,13 +109,13 @@ bool ApplySLTPSettings(const SLTPManagerPanelSettings &settings,
|
||||
settings.active_step_trigger_pips,
|
||||
settings.active_step_move_pips);
|
||||
g_sltp_manager.SetTpProgressStopSettings(settings.use_tp_progress_stop,
|
||||
settings.tp_progress_trigger_percent,
|
||||
settings.tp_progress_sl_lock_percent);
|
||||
settings.tp_progress_trigger_percent,
|
||||
settings.tp_progress_sl_lock_percent);
|
||||
g_sltp_manager.SetHighVolatilityLimitSettings(settings.use_high_volatility_limit);
|
||||
|
||||
if(!g_sltp_manager.ValidateSettings())
|
||||
if(settings.manager_enabled && !g_sltp_manager.ValidateSettings())
|
||||
{
|
||||
Print("HIT position manager SLTP settings rejected. Manager is disabled until valid settings are applied.");
|
||||
Print("HIT position manager SLTP settings rejected. Previous valid settings remain active.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user