![見出し画像](https://assets.st-note.com/production/uploads/images/24283428/rectangle_large_type_2_cd6846900aaa4b7eeec16f24e1e62eaa.jpg?width=800)
【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.実行結果
今回は、5分足・始値のみのモデルで検証しています。ポジションを持っているときにはエントリーしていないことが確認できます。
また、外部からもパラメーターを入力できるようになっていました。
今回は以上です。
この記事が気に入ったらサポートをしてみませんか?