ご訪問ありがとうございます。
元スーパー店員で不労所得生活を目論むひろしです。
前回
今回は、とっても価値の高い方法をお伝えします。
これを知ることであなたは、
トレンド相場での最強ツールを
手に入れることになります。
逆に、知らないと
せっかくのトレンド相場で
チキン利食いを繰り返し
千載一遇の好機をミスミス
逃してしまうことになるのです。
その方法とは。。。。
ひろし:「トレーリングストップです。」
あなた:「トレーリングストップ?」
はい、ストップ(逆指値)が価格の上昇に
合わせて動いていくのです。
そして、なんとその「トレーリングストップ」を
TrimPipsにインプリメントしました。
実は、アンケートにも「トレール決済」のリクエストは
多数ありました。
ただ、なんとなく難しそうだったので、
スルーしていたのです。
とはいえ、ちょっとやったら
簡単に実現できました。
MetaTraderでは
まず、MetaTrader上での設定方法です。
以下のように設定したいポジションで①右クリックし
②[トレーリングストップ]とポイントを選択することで
設定できます。
では、TrimPipsでは。
設定画面
「パラメーターの入力」画面で
「トレーリングストップを設定する」でtrueを選択し
[PIPS]を入力します。
仕様
トレーリングストップがtrueの場合、
TrimPipsが動作している通貨の全てのポジションに対して
トレーリングストップするので、すべてに逆指値が設定されます。
ロングの逆指値
BID-設定PIPS
ショートの逆指値
ASK+設定PIPS
注意
トレーリングストップの優先順位が最も高いので、
手動でSLを指定していたり、「注文時のTP,SL」でSLが指定されていても
トレーリングストップで逆指値が上書きされます。
動かしてみた
こんな感じで、トレーリングストップを
30pipsに設定すると逆指値を削除しても
新たに、逆指値(ロング:BID-30pips、ショート:ASK+30pips)が設定されます。
以下の場合、 ロング109.68n→109.38n、ショート 109.68n→109.98n
ソース変更箇所
パラメータの入力
1 2 3 |
input string Trailing_Stop = "==========================="; //===トレーリングストップ=== input bool input_Trailing_Stop = false; //トレーリングストップを設定する input int input_Trailing_Stop_Pips = 30; //PIPS |
かなり荒いです。
月曜以降にもう少し修正します。
MT5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
void OnTick() //-------------------------------------------------------------------------------- //トレーリングストップを設定する //-------------------------------------------------------------------------------- if(input_Trailing_Stop) { bool modify_ret; // 変更判定 int errorcode; if(bOrderType == POSITION_TYPE_BUY) //ポジションタイプ { double Max_Stop_Loss = last_tick.bid - (10 * Point() * input_Trailing_Stop_Pips); // Print("Max_Stop_Loss = ", Max_Stop_Loss, "last_tick.bid - ( 10 * Point() * input_Trailing_Stop_Pips)"); Max_Stop_Loss = NormalizeDouble(Max_Stop_Loss, Digits()); // リミット価格 を正規化 //現ポジションのSTOPを取得 double Current_Stop = PositionGetDouble(POSITION_SL); //ポジションのSTOPを超えていたら if(Current_Stop < Max_Stop_Loss) { //損切り価格の変更 Print("Max_Stop_Loss = ", Max_Stop_Loss, "NormalizeDouble(Max_Stop_Loss, Digits() ,Current_Stop =", Current_Stop); modify_ret = Trade.PositionModify( PositionGetInteger(POSITION_TICKET), // チケットNo Max_Stop_Loss, // ストップロス価格 0 // リミット価格 ); if(modify_ret == false) // 注文変更拒否 { Sleep(10); // 10msec待ち errorcode = GetLastError(); // エラーコード取得 printf("注文変更拒否。エラーコード:%d ", errorcode); // printf("%d回目:注文変更拒否。エラーコード:%d , 詳細:%s ", modify_resend_num + 1, errorcode, ErrorDescription(errorcode)); } else // 決済注文約定 { //Print("注文変更完了。 チケットNo=", i); // break; } } } else { double Max_Stop_Loss = last_tick.ask + (10 * Point() * input_Trailing_Stop_Pips); Max_Stop_Loss = NormalizeDouble(Max_Stop_Loss, Digits()); // リミット価格 を正規化 //現ポジションのSTOPを取得 double Current_Stop = PositionGetDouble(POSITION_SL); //ポジションのSTOPを超えていたら if(Current_Stop > Max_Stop_Loss || Current_Stop == 0) { //損切り価格の変更 Print("Max_Stop_Loss = ", Max_Stop_Loss, "NormalizeDouble(Max_Stop_Loss, Digits() ,Current_Stop =", Current_Stop); modify_ret = Trade.PositionModify( PositionGetInteger(POSITION_TICKET), // チケットNo Max_Stop_Loss, // ストップロス価格 0 // リミット価格 ); if(modify_ret == false) // 注文変更拒否 { Sleep(10); // 10msec待ち errorcode = GetLastError(); // エラーコード取得 printf("注文変更拒否。エラーコード:%d ", errorcode); // printf("%d回目:注文変更拒否。エラーコード:%d , 詳細:%s ", modify_resend_num + 1, errorcode, ErrorDescription(errorcode)); } else // 決済注文約定 { //Print("注文変更完了。 チケットNo=", i); // break; } } } }//input_Trailing_Stop |
MT4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
//-------------------------------------------------------------------------------- //トレーリングストップを設定する //-------------------------------------------------------------------------------- if(input_Trailing_Stop) { bool modify_ret; // 変更判定 int errorcode; double Max_Stop_Loss; double Current_Stop; //買いポジションの場合 if(bOrderType == OP_BUY) { //現在価格からSTOPを算出する Max_Stop_Loss = Bid - (input_Trailing_Stop_Pips / DigitsValue); // Max_Stop_Loss = NormalizeDouble(Max_Stop_Loss, MarketInfo(m_symbol, MODE_DIGITS)); //現ポジションのSTOPを取得 // Current_Stop = NormalizeDouble(OrderStopLoss(), MarketInfo(m_symbol, MODE_DIGITS)); Current_Stop = OrderStopLoss(); //ポジションのSTOPを超えていたら if(Current_Stop < Max_Stop_Loss) { //損切り価格の変更 modify_ret = OrderModify(OrderTicket(), OrderOpenPrice(), Max_Stop_Loss, 0, 0); if(modify_ret == false) // 注文変更拒否 { Sleep(10); // 10msec待ち errorcode = GetLastError(); // エラーコード取得 printf("注文変更拒否。エラーコード:%d ", errorcode); // printf("%d回目:注文変更拒否。エラーコード:%d , 詳細:%s ", modify_resend_num + 1, errorcode, ErrorDescription(errorcode)); } else // 決済注文約定 { //Print("注文変更完了。 チケットNo=", i); // break; } } } //売りポジションの場合 else { //現在価格からSTOPを算出する Max_Stop_Loss = Ask + (input_Trailing_Stop_Pips / DigitsValue); // Max_Stop_Loss = NormalizeDouble(Max_Stop_Loss, MarketInfo(m_symbol, MODE_DIGITS)); //現ポジションのSTOPを取得 // Current_Stop = NormalizeDouble(OrderStopLoss(), MarketInfo(m_symbol, MODE_DIGITS)); Current_Stop = OrderStopLoss(); //損切り価格の変更 if(Current_Stop > Max_Stop_Loss || Current_Stop == 0) { if(!OrderModify(OrderTicket(), OrderOpenPrice(), Max_Stop_Loss, 0, 0)) { Sleep(10); // 10msec待ち errorcode = GetLastError(); // エラーコード取得 printf("注文変更拒否。エラーコード:%d ", errorcode); // printf("%d回目:注文変更拒否。エラーコード:%d , 詳細:%s ", modify_resend_num + 1, errorcode, ErrorDescription(errorcode)); } else // 決済注文約定 { //Print("注文変更完了。 チケットNo=", i); // break; } } } } |
ダウンロードはこちらから
つぎ
コメント