アイデア提供者: Vladimir Gribachev
MQL5コード提供者: Vladimir Karputov
このEA(エキスパートアドバイザー)は、カスタムインジケーターを使用せず、ポジションを擬似ランダムにオープンします。また、現在の統計情報を2つの言語で表示できます。

トレーリング機能は、オープンポジションのストップロスを修正します。損失が発生した場合、マーチンゲールを使用してロットを増加させます。損失を監視する方法については、OnTradeTransactionで取引理由が DEAL_REASON_SL かどうか確認します。これは、ストップロスが発動したサインです:
//+------------------------------------------------------------------+ //| TradeTransaction関数 | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { //--- 取引タイプを列挙型として取得 ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- もし取引が履歴への追加によるものであれば if(type==TRADE_TRANSACTION_DEAL_ADD) { long deal_ticket =0; long deal_order =0; long deal_time =0; long deal_time_msc =0; long deal_type =-1; long deal_entry =-1; long deal_magic =0; long deal_reason =-1; long deal_position_id =0; double deal_volume =0.0; double deal_price =0.0; double deal_commission =0.0; double deal_swap =0.0; double deal_profit =0.0; string deal_symbol =""; string deal_comment =""; string deal_external_id =""; if(HistoryDealSelect(trans.deal)) { deal_ticket =HistoryDealGetInteger(trans.deal,DEAL_TICKET); deal_order =HistoryDealGetInteger(trans.deal,DEAL_ORDER); deal_time =HistoryDealGetInteger(trans.deal,DEAL_TIME); deal_time_msc =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC); deal_type =HistoryDealGetInteger(trans.deal,DEAL_TYPE); deal_entry =HistoryDealGetInteger(trans.deal,DEAL_ENTRY); deal_magic =HistoryDealGetInteger(trans.deal,DEAL_MAGIC); deal_reason =HistoryDealGetInteger(trans.deal,DEAL_REASON); deal_position_id =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID); deal_volume =HistoryDealGetDouble(trans.deal,DEAL_VOLUME); deal_price =HistoryDealGetDouble(trans.deal,DEAL_PRICE); deal_commission =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION); deal_swap =HistoryDealGetDouble(trans.deal,DEAL_SWAP); deal_profit =HistoryDealGetDouble(trans.deal,DEAL_PROFIT); deal_symbol =HistoryDealGetString(trans.deal,DEAL_SYMBOL); deal_comment =HistoryDealGetString(trans.deal,DEAL_COMMENT); deal_external_id =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID); } else return; if(deal_symbol==m_symbol.Name() && deal_magic==m_magic) if(deal_entry==DEAL_ENTRY_OUT) { PrevBars=0; if(deal_reason==DEAL_REASON_SL && deal_commission+deal_swap+deal_profit<0.0) last_lots_sl=deal_volume; else last_lots_sl=0.0; } } }
入力パラメータ
- ストップロス - ストップロス;
- テイクプロフィット - テイクプロフィット;
- トレーリングストップ - トレーリング;
- トレーリングステップ - トレーリングステップ;
- ロット - ロットサイズを手動で設定(ロットが0より大きい場合、リスクは0に設定する必要があります);
- リスク - ロットサイズが自動で計算されます(リスクが0より大きい場合、ロットは0に設定する必要があります);
- マーチンゲール - 前のポジションがストップロスで閉じられ、損失が出た場合のロット増加比率;
- 最大ロット - 最大ポジションサイズ; このサイズを超えると、EAは異常終了します;
- マジックナンバー - EAのユニークな識別子。
テストが中断されたのは(EAがチャートから強制的にアンロードされたため)、参照ロットが最大ロットのパラメータを超えたからです:
