システムトレード

リスクマネージャーEA - MetaTrader 4向けのトレーディングアドバイザー
MetaTrader4
リスクマネージャーEA - MetaTrader 4向けのトレーディングアドバイザー

トレードで最高の結果を得るためには、自分自身でテクニカル分析を行うことが重要です。このEAを使うことで、どの方向にトレードを行うかを自分で決められます(ロングとショートが可能ですが、ヘッジ機能は効きません)。EAは設定が整うまで待機し、その後あなたの代わりにトレードを実行します。このEAは、ボリュームやレベルを考慮してトレードを行う場所を決定します。 レベルと長さは、プルバックのレベルと長さに対応しています。長さが長くなるほど、より多くのポジションをスケールインし、大きなレベルになるほど、より深いプルバックを探すことになります。 クローズPLは、EAがすべてのポジションをクローズする前の最大浮動損益です。 利益とリスクの制限は、特定のシグナルで達成したい利益/リスクを指定するために使用するパラメーターです。 資本パラメーターは、EAがアタッチされる前のあなたの残高に設定されます。浮動損失または利益がある場合は変更することをお勧めしますが、デフォルト値の0はEAがアタッチされる前の初期残高を前提とします。 複数の通貨ペアを取引している場合、ヘッジ機能は機能しないため、ヘッジは行われません。もし一つの通貨ペアのみを取引している場合は、ヘッジ機能を使いたい場合はマルチペアトレーディングをオフにしてください。ヘッジ機能は、ヘッジレベルに達したときにポジションをヘッジします。ヘッジレベルとは、残っているリスクのパーセントを指し、指定された比率に基づきます。 最大サイズは、EAがスケールインする最大のポジションサイズです。レイヤーは、最大サイズを分散させるポジションの数です。たとえば、1ロットのインストゥルメントを購入し、10回スケールインしたい場合、最大サイズは1、レイヤーは10となります。

2023.04.08
ボラティリティ市場でのグリッドトレーディングアルゴリズム - MetaTrader 4用のエキスパート
MetaTrader4
ボラティリティ市場でのグリッドトレーディングアルゴリズム - MetaTrader 4用のエキスパート

こんにちは、トレーダーの皆さん!今日はボラティリティの高い市場で活用できるグリッドトレーディングアルゴリズムについてお話しします。このアルゴリズムはMetaTrader 4で使えるエキスパートアドバイザー(EA)です。 まず、入力パラメータについて説明します。Tpは利益確定の値で、Tp × 投資額に達した時に利益を確定します。一般的には0.01から0.1の範囲が推奨されています。次に、SlowMovingAverageは移動平均の期間で、トレンドを判断するために使用します。また、Multiplierはボリュームの係数で、グリッド内の次の注文はMultiplier × 最後の注文サイズで決まります。TimeFrameは分単位の時間枠で、推奨は1時間(60分)または15分(15)です。 このエキスパートアドバイザーには、TotalOrderLots()という関数が含まれており、使用したロット数を返します。また、CalcMaxLot関数は、取引可能な最大ロット数を返します。さらに、CalcGridLot関数は、指定されたパラメータに基づいてセキュリティの初期ロットを返します。 さらに、BearishおよびBullish Engulfing関数は、キャンドルスティックパターンが発生した場合に真の値を返します。OpenOrderProfits関数は、オープンオーダーのすべての利益を返し、CloseAllOrdersはすべてのオーダーを閉じます(複数回チェックします)。 このEAは、ATR(平均真の範囲)値に基づいてグリッドオーダーを配置します。

2023.01.27
AK-47スキャルパーEAの設定と使い方 - MetaTrader 4用
MetaTrader4
AK-47スキャルパーEAの設定と使い方 - MetaTrader 4用

1. 入力パラメータ #define ExtBotName "AK-47スキャルパーEA" //ボット名 #define  Version "1.00" //--- 入力パラメータ --- extern string  EASettings        = "---------------------------------------------"; //-------- <EA設定> -------- input int      InpMagicNumber    = 124656;   //マジックナンバー extern string  TradingSettings   = "---------------------------------------------"; //-------- <取引設定> -------- input double   Inpuser_lot       = 0.01;     //ロット数 input double   InpSL_Pips        = 3.5      //ストップロス(ピップ数) input double   InpMax_spread     = 0.5      //最大許容スプレッド(ピップ数) (0 = フローティング) extern string  MoneySettings     = "---------------------------------------------"; //-------- <資金設定> -------- input bool     isVolume_Percent  = true;     //ボリュームのパーセントを許可 input double   InpRisk           = 3        //残高のリスクパーセント(%) input string   TimeSettings      = "---------------------------------------------"; //-------- <取引時間設定> -------- input bool     InpTimeFilter     = true      //取引時間フィルター input int      InpStartHour      = 2         //開始時間 input int      InpStartMinute    = 30        //開始分 input int      InpEndHour        = 21        //終了時間 input int      InpEndMinute      = 0         //終了分 2. ローカル変数の初期化 //--- 変数 --- int      Pips2Points;               // スリッページ  3ピップ    3=ポイント    30=ポイント double   Pips2Double;               // ストップロス 15ピップ    0.015      0.0150 int      InpMax_slippage   = 3;     // 最大スリッページ許可. bool     isOrder           = false; // 1オーダーのみオープン int      slippage; string   strComment        = ""; 3. メインコード a/ EA初期化関数 int OnInit()   { //---      //3または5桁の検出    //ピップとポイント    if (Digits % 2 == 1)    {       Pips2Double  = _Point*10;       Pips2Points  = 10;       slippage = 10* InpMax_slippage;    }    else    {           Pips2Double  = _Point;       Pips2Points  =  1;       slippage = InpMax_slippage;    }    //---    return(INIT_SUCCEEDED);   } b/ EAティック関数 void OnTick()   { //---      if(IsTradeAllowed() == false)      {       Comment("AK-47 EA 取引が許可されていません。");       return;      }             MqlDateTime structTime;        TimeCurrent(structTime);        structTime.sec = 0;               //開始時間の設定        structTime.hour = InpStartHour;        structTime.min = InpStartMinute;              datetime timeStart = StructToTime(structTime);               //終了時間の設定        structTime.hour = InpEndHour;        structTime.min = InpEndMinute;        datetime timeEnd = StructToTime(structTime);               double acSpread = MarketInfo(Symbol(), MODE_SPREAD);        StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);              strComment = " " + ExtBotName + " - v." + (string)Version;       strComment += " GMT時間 = " + TimeToString(TimeGMT(),TIME_DATE|TIME_SECONDS);       strComment += " 取引時間 = [" + (string)InpStartHour + "h" + (string)InpStartMinute + " --> " +  (string)InpEndHour + "h" + (string)InpEndMinute + "]";              strComment += " 現在のスプレッド = " + (string)acSpread + " ポイント";       strComment += " 現在のストップレベル = " + (string)StopLevel + " ポイント";              Comment(strComment);          //値の更新       UpdateOrders();              TrailingStop();              //取引時間の確認       if(InpTimeFilter)       {          if(TimeCurrent() >= timeStart && TimeCurrent() < timeEnd)          {             if(!isOrder) OpenOrder();          }       }       else       {          if(!isOrder) OpenOrder();       }   } 3.1 注文を送信するための信号を計算 void OpenOrder(){       //int OrdType = OP_SELL;//-1;    double TP = 0;    double SL = 0;    string comment = ExtBotName;    //ロット数の計算    double lot1 = CalculateVolume();       //if(OrdType == OP_SELL){       double OpenPrice = NormalizeDouble(Bid - (StopLevel * _Point) - (InpSL_Pips/2) * Pips2Double, Digits);       SL = NormalizeDouble(Ask + StopLevel * _Point + InpSL_Pips/2 * Pips2Double, Digits);                if(CheckSpreadAllow())                                    //スプレッドを確認       {          if(!OrderSend(_Symbol, OP_SELLSTOP, lot1, OpenPrice, slippage, SL, TP, comment, InpMagicNumber, 0, clrRed))          Print(__FUNCTION__,"--> 注文送信エラー ",GetLastError());       }    //} } 3.2 ボリュームの計算 double CalculateVolume()   {    double LotSize = 0;    if(isVolume_Percent == false)      {       LotSize = Inpuser_lot;      }    else      {       LotSize = (InpRisk) * AccountFreeMargin();       LotSize = LotSize /100000;       double n = MathFloor(LotSize/Inpuser_lot);       //Comment((string)n);       LotSize = n * Inpuser_lot;       if(LotSize < Inpuser_lot)          LotSize = Inpuser_lot;       if(LotSize > MarketInfo(Symbol(),MODE_MAXLOT))          LotSize = MarketInfo(Symbol(),MODE_MAXLOT);       if(LotSize < MarketInfo(Symbol(),MODE_MINLOT))          LotSize = MarketInfo(Symbol(),MODE_MINLOT);      }    return(LotSize);   } 3.3 EAは「トレーリングストップ」機能を持つ。 価格が変動するたびにSLが変わる void TrailingStop()   {    for(int i = OrdersTotal() - 1; i >= 0; i--)      {       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))         {          if((OrderMagicNumber() == InpMagicNumber) && (OrderSymbol() == Symbol()))   //_Symbol))            {             //売り注文の場合             if(OrderType() == OP_SELL)               {                   //価格が変わるとSLを計算                   double SL_in_Pip = NormalizeDouble(OrderStopLoss() - (StopLevel * _Point) - Ask, Digits) / Pips2Double;                   if(SL_in_Pip > InpSL_Pips){                         double newSL = NormalizeDouble(Ask + (StopLevel * _Point) + InpSL_Pips * Pips2Double, Digits);                         if(!OrderModify(OrderTicket(), OrderOpenPrice(), newSL, OrderTakeProfit(), 0, clrRed))                         {                            Print(__FUNCTION__,"--> 注文修正エラー ",GetLastError());                         {                          continue;                           }                     }           }       }          //売りストップ注文の場合             else if(OrderType() == OP_SELLSTOP)               {                   double SL_in_Pip = NormalizeDouble(OrderStopLoss() - (StopLevel * _Point) - Ask, Digits) / Pips2Double;                                      if(SL_in_Pip < InpSL_Pips/2){                      double newOP = NormalizeDouble(Bid - (StopLevel * _Point) - (InpSL_Pips/2) * Pips2Double, Digits);                      double newSL = NormalizeDouble(Ask + (StopLevel * _Point) + (InpSL_Pips/2) * Pips2Double, Digits);                                           if(!OrderModify(OrderTicket(), newOP, newSL, OrderTakeProfit(), 0, clrRed))                      {                         Print(__FUNCTION__,"--> 保留注文修正エラー!", GetLastError());                         continue                            }                         }                         }               }            }      }   }

2023.01.14
MT4用のFXトレードマネージャー - 効率的な取引管理ツール
MetaTrader4
MT4用のFXトレードマネージャー - 効率的な取引管理ツール

こんにちは、トレーダーの皆さん!今日は、MetaTrader 4(MT4)で使えるFXトレードマネージャーについてお話ししたいと思います。このツールは、オープンオーダーの管理を簡単にしてくれる優れものです。 新しいオーダーを開くと、トレードマネージャーが自動的にストップロス(SL)とテイクプロフィット(TP)を設定してくれます。価格が動くと、プログラムはストップロスをブレイクイーブン(オープン価格と同じ)に移動させたり、トレーリングストップを使って利益を守ることができます。 FXトレードマネージャーは、現在のシンボル(EAが動作するところ)だけでなく、すべてのオープンオーダーを管理することができ、ブローカーからストップロスやテイクプロフィットを隠すことも可能です。以下のように、マニュアルトレードを管理するための戦略を提供しています: トレードのためのストップロスおよび/またはテイクプロフィットをピップスで設定 価格に応じてSLをトレイルするトレーリングストップ機能 選択した距離でSLをブレイクイーブンに移動させる機能 SL/TPは、ブローカーによって管理される標準的な方法でも、ステルスモードで隠すこともできます。 パラメータ: “SLTP パラメータ” ストップロス – トレードごとのストップロスをピップスで設定 テイクプロフィット – トレードごとのテイクプロフィットをピップスで設定 “ブレイクイーブン” UseBreakEven (true/false) – オープントレードに対してブレイクイーブン機能を使うかどうか BEActivation – ブレイクイーブン機能が有効になる際の利益(ピップス) BELevel – ブレイクイーブン機能によって設定されるSLからの追加距離(ピップス) “トレーリングストップ” UseTrailingStop (true/false) – オープントレードに対してトレーリングストップ機能を使うかどうか TSStart – トレーリングストップ機能が有効になる際の利益(ピップス) TSStep – 新しいSLと現在のSLの間の最小差(ピップス) TSDistance – トレーリングストップ機能によってSLが設定される現在の価格からの距離(ピップス) “動作” StealthMode (true/false) – ブローカーからSL/TPレベルを隠し、EAがプログラム的にそのレベルでトレードをクローズするかどうか OnlyCurrentPair (true/false) – 現在のチャートのシンボルのトレードのみ管理するか、すべてのペアを管理するか 情報: すべてのトレード関連のパラメータは、EAの設定で変更可能です。また、FXトレードマネージャーは、チャート上に現在のデイリープロフィット/ロスをピップスとアカウント通貨で表示します。

2023.01.10
MT4用のFXトレードマネージャーグリッドで取引をスマートに管理しよう
MetaTrader4
MT4用のFXトレードマネージャーグリッドで取引をスマートに管理しよう

FXトレードマネージャーグリッドMT4は、あなたの注文を管理し、目標を達成するための強力なツールです。まずは、テイクプロフィットを設定した最初の注文を出し、EAを実行して、獲得したい利益(ピップス)をパラメータに設定するだけでOKです。このEAは、指定されたピップス数を集めながらポジションを管理します。この戦略は、現在の通貨ペアで手動でオープンしたトレードを管理するためのものです。 戦略は、現在オープンしているトレードにピップス間隔をあけてポジションを追加するグリッド管理を行います。最大で15件のトレードまで追加可能です。最初の3つのトレードはそれぞれ個別のテイクプロフィットで管理され、4件目以降は全体のグリッドを共通レベル(ブレイクイーブン)でクローズします。テイクプロフィットでクローズしたトレードは再度更新することが可能です。損失が許可されたリスクバランスの割合を超えた場合は、全体のサイクルをクローズします。 パラメータ: 「追加トレードパラメータ」: AddNewTradeAfter – 最後のトレードからの距離(ピップス)で、トレードがグリッドに追加される距離 「テイクプロフィット」 TakeProfit1Total (数値) – 最初のポジションから必要な総テイクプロフィット(ピップス) TakeProfit1Partitive – サイクル内の最初のポジションに対する初期テイクプロフィット(ピップス) TakeProfit1Offset – 最後にクローズした最初のポジションのテイクプロフィットから再開するために必要な最小距離(ピップス) TakeProfit 2/3 – サイクル内の2番目/3番目のポジションに対する個別のテイクプロフィット(ピップス) TakeProfit 4/5/6/…15Total – サイクル内の全ポジションからの総テイクプロフィット(ピップス)(4件以上のトレードがオープンされている場合) 「トレードパラメータ」: MaxOrders – グリッド内で許可される最大トレード数 Risk Balance % – アカウント残高のパーセンテージとして許可される最大損失(すべてのオープンポジションをクローズ) Lots – EAによってオープンされるトレードのロットサイズ Slippage – 許可されるスリippage(ポイント) 情報: すべてのトレードと機能のパラメータは、EAのパラメータで設定可能です。FXトレードマネージャーグリッドは、現在のサイクルからの利益/損失をピップスとアカウント通貨でチャート上に表示します。

2023.01.10
メタトレーダー4用ミーンリバージョンEAの活用法
MetaTrader4
メタトレーダー4用ミーンリバージョンEAの活用法

こんにちは、トレーダーの皆さん!今日は、メタトレーダー4で使えるミーンリバージョン戦略についてお話しします。この戦略は、特に日足チャートの主要な為替ペアで効果を発揮します。 まずはデモで試してみよう デモ口座でまず試してみてください。 このEAはオープンキャンドルの価格のみでトレードを行います! トレードで負けた場合にロットサイズを増やしたくない場合は、設定を「IncreaseFactor=0」にしてください。 それでは、具体的な設定について見ていきましょう。 設定項目 Use_TP_In_Money: 利益確定を金額で使用するか (true/false) TP_In_Money: 利益確定金額 (10-100) Use_TP_In_percent: 利益確定をパーセンテージで使用するか (true/false) TP_In_Percent: 利益確定パーセンテージ (10-100) ------------[複数トレードのためのマネートレーリングストップ]---------------------- Enable_Trailing: マネートレーリングを有効にする (true/false) 現在の通貨での利益確定金額 (25-200) 現在の通貨でのロスカット金額 (1-20) -------------------------------------------------------------------------------------- Exit: トレンドが逆行した場合にトレードを閉じる (true/false) BarsToCount: カウントするバーの数 (1-20) Lots: ロットサイズ (0.01-1) Lots size Exponent: (1.01-2) IncreaseFactor: 負けたトレードからロットを増やす量 (0.001-0.1) Stop_Loss: ロスカット (30-500) / 複数トレードの場合は600を設定 MagicNumber: マジックナンバー (1-100000) TakeProfit: 利益確定 (50-200) / 複数トレードの場合は600を設定 FastMA: 短期移動平均 (1-20) SlowMA: 長期移動平均 (50-200) Mom_Sell: モメンタム売りトリガー (0.1-0.9) Mom_Buy: モメンタム買いトリガー (0.1-0.9) ---------------------ドローダウンの管理----------------------------- UseEquityStop: (true/false) TotalEquityRisk: (0.01-20) ------------------------------------------------------------------------------- Max_Trades: (1-12) FractalNum: 高値と安値の数 (1-10) ----------------もし1トレードのみを使用する場合:----------------------- ///////////////////////////////////////////////////////////////////// USETRAILINGSTOP: トレーリングストップを使用するか (true/false) WHENTOTRAIL: トレーリングを開始するタイミング (40-100) TRAILAMOUNT: トレーリング金額 (40-100) Distance From Candle: キャンドルからの距離 (1-100) USECANDELTRAIL: キャンドルトレーリングを使用するか (true/false) X: キャンドルの数 (1-100) USEMOVETOBREAKEVEN: ブレークイーブンを有効にする (true/false) WHENTOMOVETOBE: ブレークイーブンに移動するタイミング (1-30) PIPSTOMOVESL: ストップロスを移動させるpips (1-30) このEAは数ヶ月ごとに最適化することをお勧めします。そして、上記の設定をそのまま使用してください。ヘッジンググリッドEAや単一トレードEAとしても利用可能です。 バックテストの方法については、こちらのリンクを参考にしてください: バックテストの手順

2022.10.26
トリッカーレス:MetaTrader 4向けのトレーディングエキスパート
MetaTrader4
トリッカーレス:MetaTrader 4向けのトレーディングエキスパート

皆さん、こんにちは!今日は、MetaTrader 4用のトレーディングエキスパート「トリッカーレス」についてお話ししたいと思います。このツールは、特にEUR/GBPの取引において高いパフォーマンスを発揮しています。 戦略テスター報告 以下は「トリッカーレス RHMP」の戦略テスターの結果です。テスト期間は2021年10月15日から2022年9月7日までで、毎分のデータを使用して詳細に分析しています。 シンボル EURGBP(ユーロ対ポンド) 期間 デイリー(D1)2021.10.15 00:00 - 2022.09.07 00:00 モデル 全ティックモデル(最も正確な方法) パラメータ 各種設定が施されており、効率的な取引を実現しています。 テスト内のバー数 1235 モデル化されたティック数 5326472 モデル品質 58.38% 初期証拠金 10.00 スプレッド 30 総純利益 216.31 利益ファクター 2361.41 期待されるペイオフ 3.93 総取引数 55 ショートポジション(勝率) 27(96.30%) ロングポジション(勝率) 28(100.00%) このテスト結果を見てみると、トリッカーレスは非常に高い成功率を誇っていることが分かりますね。特にロングポジションの勝率が100%というのは驚異的です! 取引履歴 # 時間 タイプ オーダー サイズ 価格 S / L T / P 利益 残高 1 2021.10.15 13:30 買い 1 0.03 0.84547 0.00000 0.00000 2 2021.10.19 08:00 クローズ 1 0.03 0.84561 0.00000 0.00000 0.02 10.02 このように、トリッカーレスは安定した利益を生み出しています。これからもこのエキスパートを使って、さらなる成功を目指していきましょう!

2022.06.28
新しいバーやキャンドルの開始を検出する方法 - MetaTrader 4用の実用的なコード
MetaTrader4
新しいバーやキャンドルの開始を検出する方法 - MetaTrader 4用の実用的なコード

トレーダーの皆さん、こんにちは!今日は、MetaTrader 4で新しいバーやキャンドルの開始を検出する方法についてお話ししましょう。特に、エキスパートアドバイザー(EA)を使用している方には役立つ内容です。 通常、MetaTraderのターミナルでは、新しいティックの価格が到着すると、デフォルトのイベント処理関数であるOnTick()が呼び出されます。しかし、残念ながら、新しいバーが開始またはオープンした時のデフォルトのイベント処理関数は存在しません。 そこで、新しいバーの開始を検出するためには、現在の最も最近のバーのオープン時間を監視する必要があります。オープン時間が変わった時、それが新しいバーの開始を示します。以下に、MQL4とMQL5の両方に対応したサンプルコードを示します。 // デフォルトのティックイベントハンドラ    void OnTick()    {       // 新しいバーのチェック(MQL4とMQL5両方に対応)          static datetime dtBarCurrent  = WRONG_VALUE;                 datetime dtBarPrevious = dtBarCurrent;                          dtBarCurrent  = iTime( _Symbol, _Period, 0 );                 bool     bNewBarEvent  = ( dtBarCurrent != dtBarPrevious );       // 新しいバーのイベントに反応して処理を行う          if( bNewBarEvent )          {             // 最初のティックを受信したかどうかを検出し、処理を行う                /* 例えば、チャートに最初に添付されたとき、バーが進行中で、実際には新しいバーの開始ではない場合。 */                if( dtBarPrevious == WRONG_VALUE )                {                   // 最初のティックまたはバーの途中で何かをする ...                }                else                {                   // 通常のバーの開始時に何かをする ...                };             // 上記の条件に関わらず、何かをする ...          }          else          {             // 他の処理を行う ...          };       // その他の処理 ...    }; このコードでは、static変数を使用して、バーのオープン時間を記録します。関数を抜ける際にもデータを保持し、現在のバーのオープン時間の変化を検出するための重要な要素です。 また、EAが初めてチャートに配置されたとき、このコードは新しいバーが開いたかのように反応します。この場合は、特別な処理が必要になりますので注意が必要です。 最後に、私のCodeBaseの出版物のソースコードは、現在MetaEditorの「Public Projects」タブでも入手可能です。ぜひ、探してみてください!

2022.04.24
最初 前へ 1 2 3 4 5 6 7 8 9 次へ 最後