見出し画像

【MQL】ポジション保有時は新規ポジションを持たないようにする【EA】

本記事は、プログラミング学習の備忘録です。本記事のコード等をご利用になる際は、ご自身の責任においてご利用ください。

1.内容

前回作成した「陽線2連続が発生したら買う」EAを改変して、ポジションを持っているときは新規ポジションを取らないようにするEAを作成しました。

また、SLやTP等のパラメーターを外部から入力できるようにしました。


2.コード

#property version   "1.00"
#property strict

input double LOT = 0.01;   //ロット
input int SLIP = 1;     //スリッページ
input double SL = 10.0;    //SL
input double TP = 20.0;    //TP
input int MAGIC = 12345;      //マジックナンバー

void OnTick()
{
  double stoploss = NormalizeDouble(Bid - SL * Point * 10, Digits);
  double takeprofit = NormalizeDouble(Bid + TP * Point * 10, Digits);

  if(OrdersTotal() == 0 && Close[2] - Open[2] > 0 && Close[1] - Open[1] > 0 ) {
     int ticket = OrderSend(Symbol(), OP_BUY, LOT, Ask, SLIP, stoploss, takeprofit, "BUY", MAGIC, 0, clrRed);
  }


【メモ1】OrderSend関数
MQL4 Reference を確認するとOrderSend関数の使用例が以下のとおり載っている。

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- get minimum stop level
  double minstoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
  Print("Minimum Stop Level=",minstoplevel," points");
  double price=Ask;
//--- calculated SL and TP prices must be normalized
  double stoploss=NormalizeDouble(Bid-minstoplevel*Point,Digits);
  double takeprofit=NormalizeDouble(Bid+minstoplevel*Point,Digits);
//--- place market order to buy 1 lot
  int ticket=OrderSend(Symbol(),OP_BUY,1,price,3,stoploss,takeprofit,"My order",16384,0,clrGreen);
  if(ticket<0)
    {
     Print("OrderSend failed with error #",GetLastError());
    }
  else
     Print("OrderSend placed successfully");
//---
 }

10行目に
//--- calculated SL and TP prices must be normalized
と書いている。なぜ正規化する必要があるかは今の自分ではわからないけど、このとおりに設定する。


【メモ2】pointとpipについて
業者によって違うのか?とりあえず、自分の使っている業者は、
pips = 10point
のようだ。


3.コードのファイル


4.実行結果

画像1

画像2

今回は、5分足・始値のみのモデルで検証しています。ポジションを持っているときにはエントリーしていないことが確認できます。

また、外部からもパラメーターを入力できるようになっていました。

画像3

今回は以上です。

この記事が気に入ったらサポートをしてみませんか?