クリプトGT用メタトレーダー5のスクリプト - ワンクリックでストップ注文をいれる

改訂2019年2月28日、コードと使い方、変更しました。

メタトレーダー5が使える仮想通貨取引所でシンボル名がBTCUSD BTCJPY ETHUSD であれば、使えます。XBTUSDとかだと書き換えないと動きません。

クリプトGTで動作確認しています。

BTCUSD BTCJPY ETHUSDの3つに対応した、メタトレーダー5のスクリプトです。スクリプトとは、1回だけ実行するインジケータみたいなものです。

目的はポジションに手動でストップ注文をいれるのがめんどいので、マウスクリックだけで固定値幅をセットできます。パソコン設定によりますが、2回または3回クリックすればセット完了、楽ちんです。

使い方は、スクリプトにショートカットキーを割り振って、お気に入り登録して、ナビゲーターのお気に入りタブをクリックして、表示させておきます。エントリー直後にお気に入りにいれてるスクリプトをクリックすると、ストップいれていいかの確認画面が出ますので「OK」をクリックすると、すぐにストップ注文をいれることができます。

2019年2月25日午前3時のスプレッドで値幅を設定しています。今後は変動するかもしれません。

お手本にした元のコードが無料だったので、私も無料で公開します。インストールやショートカットキーの設定などは皆さんで検索して使ってください。

BTCのみ、リアル口座での動作確認済みです。他はデモ口座では確認済みです。

//+------------------------------------------------------------------+
//|                                                 Modify SL TP.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//|
//| BTCJPY, BTCUSD, ETHUSD の3つには対応した。2019-2-25 天丼界の、やんちゃん
//| 2019-2-28 スプレッド考慮の売り買いが逆だったのを訂正した。
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, fxMeter"
#property link      "https://www.mql5.com/en/users/fxmeter"
#property version   "1.00"

#property script_show_inputs
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh> 
CPositionInfo  posi;    
CTrade         trade; 
CSymbolInfo    symb;
//input double InpStoploss=1900.00; //StopLoss Pips
//
input double sl_ETHUSD =300.00; //StopLoss
input double hosei_ETHUSD =40.00;
//
input double sl_BTCUSD =1900.00; //StopLoss
input double hosei_BTCUSD =550.00;
//
input double sl_BTCJPY =2300.00; //StopLoss
input double hosei_BTCJPY =800.00;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
double InpStoploss=0.0;
double InpTakeProfit=0.0;//TakeProfit Pips
double InpHoseiUriposi=0.0;
double stoploss=0.0;
double HoseiUriposi=0.0;
double takeprofit=0.0;
ulong  slippage=3;
int    pt=1;

   if(Symbol() == "ETHUSD")
   {
      InpStoploss =sl_ETHUSD; //StopLoss 
      InpHoseiUriposi =hosei_ETHUSD;
   }

   if(Symbol() == "BTCJPY")
   {
      InpStoploss =sl_BTCJPY; //StopLoss 
      InpHoseiUriposi =hosei_BTCJPY;
   }

   if(Symbol() == "BTCUSD")
   {
      InpStoploss =sl_BTCUSD; //StopLoss 
      InpHoseiUriposi =hosei_BTCUSD;
   }
   symb.Name(Symbol());   
   if(!symb.RefreshRates())return;
   if(symb.Digits()==5 || symb.Digits()==3) pt=10;

   stoploss=InpStoploss*pt;   
   HoseiUriposi= InpHoseiUriposi * pt;
   slippage    = slippage * pt;
   takeprofit  = InpTakeProfit * pt;
   trade.SetDeviationInPoints(slippage);  
   
   //---
   double curBid = symb.Bid();   
   double slbuy=0.0,slsell=0.0,tpbuy=0.0,tpsell=0.0;
   if(stoploss>0)
   {
    slbuy =   curBid  - stoploss*symb.Point();
    slsell =  curBid + stoploss*symb.Point()+HoseiUriposi*symb.Point();
   }
   
   if(takeprofit>0)
   { 
    tpbuy =   curBid  + takeprofit*symb.Point();    
    tpsell =  curBid - takeprofit*symb.Point();
   }
   
   ModifySLTP(slbuy,tpbuy,slsell,tpsell);
   
  }
//+------------------------------------------------------------------+  
void ModifySLTP(double slPriceBuy,double tpPriceBuy,double slPriceSell,double tpPriceSell)
{
//---     
      double sl=0.0 ,tp=0.0;      
      bool bslbuy = false,btpbuy = false, bslsell = false, btpsell = false;
      if(slPriceBuy>0)bslbuy=true;
      if(tpPriceBuy>0)btpbuy=true;
      if(slPriceSell>0)bslsell=true;
      if(tpPriceSell>0)btpsell=true;
      
      if(!bslbuy && !btpbuy && !bslsell && !btpsell )
      {
          Print(__FUNCTION__,",No SL/TP need to be modified");
          return;
      }
      
      
      for(int i=PositionsTotal()-1;i>=0;i--)
      {
         if(posi.SelectByIndex(i))
         {
            if(posi.Symbol()==Symbol() )
            {                
               if(posi.PositionType()==POSITION_TYPE_BUY)
                 {
                     if(bslbuy)sl=slPriceBuy;else sl = posi.StopLoss();  
                     if(btpbuy)tp=tpPriceBuy;else tp = posi.TakeProfit();               
                     trade.PositionModify(posi.Ticket(),NormalizeDouble(sl,Digits()),NormalizeDouble(tp,Digits()));
                 }

               if(posi.PositionType()==POSITION_TYPE_SELL)
                 {
                     if(bslsell)sl=slPriceSell;else sl = posi.StopLoss();
                     if(btpsell)tp=tpPriceSell;else tp = posi.TakeProfit(); 
                     trade.PositionModify(posi.Ticket(),NormalizeDouble(sl,Digits()),NormalizeDouble(tp,Digits()));
                 }
              }
             }
          } 
//---
}  

チップはこちらからお願いします