システムトレード

ブレイクイーブン後のトレード増加 - MetaTrader 4のための実践的なEA
MetaTrader4
ブレイクイーブン後のトレード増加 - MetaTrader 4のための実践的なEA

こんにちは、トレーダーの皆さん!今日は、MetaTrader 4用の小さなEA(エキスパートアドバイザー)の魅力についてお話しします。このEAの特徴は、オーダー数をカウントする機能です。 int OrdersCounter()   {    int counter=0; //---    for(int i=OrdersTotal()-1; i>=0; i--)       if(OrderSelect(i,SELECT_BY_POS))          if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) // このEAによって開かれたオーダーか確認            { //--- ブレイクイーブンが発生したか確認    /* 買いの場合は、ストップロスがオープン価格以上であることが条件です。この実装はペンディングオーダーには適していません。*/             double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();             if(!XBreakeven) // ブレイクイーブンまたはトレーリングストップが発生していない場合               {                counter++; // ポジションをカウント               }            }    return counter;   } この関数では、ストップロスがオープン価格以上(買いの場合)またはオープン価格未満(売りの場合)でないオーダーだけをカウントしています。言い換えれば、ブレイクイーブンやトレーリングストップで保護されていないオーダーをカウントしています。 double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();             if(!XBreakeven) // ブレイクイーブンやトレーリングストップが発生していない場合 このカウンターを使って、最大ポジション数を制限します。ここでは、同時に1つのオーダーしか持たないように設定しています。    if(OrdersCounter()<MaximumOrders) ブレイクイーブンが発生するたびに、この関数はそのカウントを無視します。したがって、例として1つのポジションしか持っていなければ、カウントはゼロになり、次のオーダーを開くことができます。 また、ブレイクイーブン機能を作成しなければ、これは不可能でした。 void BreakEvenFunction()   { //---    for(int i=OrdersTotal()-1; i>=0; i--)       if(OrderSelect(i,SELECT_BY_POS))          if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())            { // 買いの場合は、Bidがオープン価格+ブレイクイーブンpips以上、売りの場合はその逆             double xHybrid = OrderType()==OP_BUY ? (Bid>OrderOpenPrice()+BreakevenPips*_Point && OrderStopLoss()<OrderOpenPrice()) : (Ask<OrderOpenPrice()-BreakevenPips*_Point && OrderStopLoss()>OrderOpenPrice());             /* 買いの場合はストップロスがオープン価格以上、売りの場合はその逆が条件 */             if(xHybrid)               {                bool modfy = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrNONE);               }            }   } これを試してみますか?

2021.07.13
MetaTrader 4でのトレーディングロボット開発 - Validate Meフレームワーク
MetaTrader4
MetaTrader 4でのトレーディングロボット開発 - Validate Meフレームワーク

Validate Meフレームワーク こんにちは、トレーダー仲間の皆さん!今日は、MetaTrader 4を使ったトレーディングロボットの開発についてお話しします。このValidate Meフレームワークは、市場での売買注文を利用して、ロボットが市場での検証を通過するために必要なチェックを行います。これは教育目的でのガイドですので、ぜひ参考にしてください。 コード例 - 買い注文 ask=MarketInfo(_Symbol,MODE_ASK);          bid=MarketInfo(_Symbol,MODE_BID);          sl=(OrderStopPips==0)?0.0:bid-ExtOrderStop;          if(sl!=0.0 && ExtOrderStop<StopLevel)             sl=bid-StopLevel;          tp=(OrderTakePips==0)?0.0:ask+ExtOrderTake;          if(tp!=0.0 && ExtOrderTake<StopLevel)             tp=ask+StopLevel;          GetLot=CheckVolumeValue(Lots);          if(!CheckStopLoss_Takeprofit(OP_BUY,ExtOrderStop,ExtOrderTake))             return;          if(CheckMoneyForTrade(GetLot,OP_BUY))             order=OrderSend(_Symbol,OP_BUY,GetLot,ask,10,sl,tp,"FrameWork",678,0,Blue); フレームワークの入力 このフレームワークを使うことで、より安全で効率的なトレードが可能になります。ぜひ、自分のロボット開発に活かしてみてくださいね!

2021.06.22
デュアルストップロス:隠れたストップロスと通常ストップロスを併用しよう
MetaTrader4
デュアルストップロス:隠れたストップロスと通常ストップロスを併用しよう

トレーダーにとって、新しいポジションを開く際に最初に考えるべきことは資金管理です。リスクをコントロールし、資本を管理する方法の一つとして、トレーダーはポジションに対して一定のマージン損失を設定することがよくあります。 多くのトレーダーは、ストップロス(またはテイクプロフィット)を設定し、その価格をポジション修正ウィンドウに入力すると、ブローカーのサーバーはその価格に達した瞬間に自動的にポジションを閉じるものだと思っています。しかし、実際にはこれは完全に正しいわけではありません。 それは、あなたが持っている口座のタイプによります。ECN口座では、ストップロスやテイクプロフィットの価格をブローカーに伝えると、その価格に達した際に、ブローカーは最初に取得可能な価格でポジションを閉じます。これに同意できない場合は、もう一度取引履歴を注意深く見直してみてください。 すると、あなたのいくつかの注文が設定した価格とは異なる価格で閉じられていることに気づくでしょう。その結果、予想以上の損失や利益を被ることがあります。これはスリッページによるものです。 さらに、一部のトレーダーは、損失限度をブローカーに正確に示すべきではないと信じています。そんなトレーダーたちから生まれたのが、隠れたストップロスです。このロボットは、その目的のために設計されています。これからは、隠れたストップロスと通常のストップロスを併用することが可能です。 通常のストップロスは、これまで通り簡単にポジションに設定できます。ロボットを使用しているか手動で取引しているかは関係ありません。 このロボットを新しいチャート(どれでも)で実行するだけで、すべてのポジションを管理できます。入力値は、隠れたストップロスと通常のストップロスの距離を決定します。この値はポイントで定義されていることに注意してください。ピップではありません。

2021.04.23
スキャルピング初心者必見!MetaTrader 4用のスキャルパーアシスタント v1.0
MetaTrader4
スキャルピング初心者必見!MetaTrader 4用のスキャルパーアシスタント v1.0

スキャルピングとは? スキャルピングは、トレーダーの間で非常に人気のある取引戦略の一つで、多くの方が少なくとも一度は試したことがあるでしょう。スキャルパーは通常、1日に10回以上の取引を行うため、各取引においてストップロスやテイクプロフィットを設定するのは少々面倒です。 複数の金融商品を扱う際の悩み もしあなたの戦略が複数の金融商品で取引を行い、かつブレイクイーブンを狙うものであれば、すべての注文を管理するのは退屈で、ミスを犯すことが多くなります。また、短い時間足で取引を行い、複数の通貨ペアを扱っている場合、デスクを離れてお茶を飲んでいる間に急激な価格変動が起こり、ブレイクイーブンのチャンスを逃してしまうこともあるでしょう。その結果、利益を得るはずだった取引が損失に変わってしまう可能性が頭をよぎります。 スキャルパーアシスタントの利点 このエキスパートアドバイザーを使用することで、ストップロスとテイクプロフィットの設定が簡単に行えます。 取引を開始した直後に、自動で初期値を設定します。 価格が希望する方向に十分に動いた場合、取引はリスクフリーまたはブレイクイーブンに設定されます。 設定項目について すべての入力値はポイント(PiPではなく)で設定されます。 extern double WhenToMoveToBE; // EAがブレイクイーブンにするために、価格がエントリーポイントから何ポイント離れている必要があるかを決定します。 extern double BEAmount; // ストップロスをエントリーポイントからどれだけ離すかを設定します。

2021.04.23
MetaTrader 4の注文管理を効率化!目標利益と損切りを設定しよう
MetaTrader4
MetaTrader 4の注文管理を効率化!目標利益と損切りを設定しよう

はじめに 今回は、MetaTrader 4で使えるエキスパートアドバイザー(EA)をご紹介します。このツールを使えば、目標利益を達成したり、損失を限定したりすることができます。さっそく見ていきましょう! 必要な設定項目 このEAには、次の3つの入力が必要です: 利益目標 損切り マジックナンバー extern double inTargetProfitMoney = 10; //利益目標($) extern double inCutLossMoney = 0.0; //損切り($) extern int inMagicNumber = 0; //マジックナンバー EAの初期化 EAが実行されると、まず OnInit() 関数が呼ばれます。この中で、入力値の確認を行います。 int OnInit() { //--- if (inTargetProfitMoney = 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == inMagicNumber) { tFloating += OrderProfit() + OrderCommission() + OrderSwap(); } } } if (tFloating >= inTargetProfitMoney || (tFloating = 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == inMagicNumber && (OrderType() == OP_BUY || OrderType() == OP_SELL)) { priceClose = (OrderType() == OP_BUY) ? MarketInfo(OrderSymbol(), MODE_BID) : MarketInfo(OrderSymbol(), MODE_ASK); if (!OrderClose(OrderTicket(), OrderLots(), priceClose, slippage, clrGold)) { Print("WARNING: クローズ失敗"); } } } } } まとめ このようにして、利益目標や損切りを設定することで、トレードのリスクを効果的に管理できます!もっと詳しい情報やMQL4のコードに関する教育を受けたい方は、ぜひ私たちのTelegramグループ t.me/codeMQL に参加してください。

2021.03.31
MetaTrader 4でのトレーリングストップの設定方法 - マジックナンバーを使った自動売買
MetaTrader4
MetaTrader 4でのトレーリングストップの設定方法 - マジックナンバーを使った自動売買

トレーリングストップは、利益を確保するためにストップロスを自動的に移動させることで、私たちの取引を大いにサポートしてくれます。これにより、常に利益エリアを保持しつつ、相場の動きに追従できます。 では、まず入力パラメータを設定するところから始めましょう。 input    bool     isTrailingStop = true;  // トレーリングストップを有効にする input    int      trailingStart  = 15;    // トレーリング開始(pips) input    int      trailingStep   = 5;     // トレーリングステップ(pips) input    int      MagicNumber = 0;        // マジックナンバー 次に、グローバル変数を設定します。 // グローバル変数 double   myPoint    = 0.0; このEAを実行すると、最初にOnInit()関数が実行され、ここで入力パラメータの検証と初期化が行われます。 int OnInit()   {       if (isTrailingStop && trailingStart <= 0){       Alert ("パラメータが不正です");       return(INIT_PARAMETERS_INCORRECT);    }       myPoint     = GetPipPoint(Symbol());       return(INIT_SUCCEEDED);   } 価格が動くたびに、OnTick()関数が実行され、その中でsetTrailingStop()関数が呼び出されます。 void OnTick()   { //---    setTrailingStop(MagicNumber);      } setTrailingStop()関数の詳細は以下の通りです。 void setTrailingStop(int magicNumber=0){    if (isTrailingStop==false) return;       int      tOrder = 0;    string   pair = "";    double   sl = 0.0, tp = 0.0;       pair = Symbol();       tOrder = OrdersTotal();    for (int i=tOrder-1; i>=0; i--){       bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);       if (OrderMagicNumber() == magicNumber && StringFind(OrderSymbol(), pair, 0) == 0 ){          if (OrderType() == OP_BUY){             if ( (Bid - (trailingStart * myPoint)) >= OrderOpenPrice()                   && (Bid - ((trailingStart+trailingStep) * myPoint) >= OrderStopLoss() )                 ){                sl = NormalizeDouble(Bid - (trailingStart * myPoint), Digits());                if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){                   Print ("#", OrderTicket(), " SLの更新に失敗しました");                }             }          }          if (OrderType() == OP_SELL){             if ( (Ask + (trailingStart * myPoint)) <= OrderOpenPrice()                   && ( (Ask + ((trailingStart+trailingStep) * myPoint) <= OrderStopLoss() ) || OrderStopLoss() == 0.0)                ){                sl = NormalizeDouble(Ask + (trailingStart * myPoint), Digits() );                if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){                   Print ("#", OrderTicket(), " SLの更新に失敗しました");                }             }       } // マジックナンバーの処理終了    }// ループ終了 } 他に必要な標準関数としては、GetPipPoint()があります。 // GetPipPoint関数 double GetPipPoint(string pair) {    double point= 0.0;    int digits = (int) MarketInfo(pair, MODE_DIGITS);    if(digits == 2 || digits== 3) point= 0.01;    else if(digits== 4 || digits== 5) point= 0.0001;    return(point); } 何か質問があれば、コメント欄に残すか、私たちのグループに参加してください。t.me/codeMQLで共有しています。 また、SignalForexアプリも提供しています。こちらをダウンロードして、より利益を上げるために活用してください。 SignalForexアプリのダウンロード

2021.03.30
最初 前へ 1 2 3 4 5 6 7 8 9 10 11 次へ 最後