MetaTrader4
シンプルなDeMarkerインジケーターを使ったEAの作成方法【MetaTrader 4】
皆さん、こんにちは!今日は私が使っているシンプルなEA(エキスパートアドバイザー)についてお話しします。これは、私が今までに作った中で最も簡単なEAですので、ぜひ読んで評価してみてください。このEAはシングルペア専用で、設定メニューから時間枠、ロット数、ストップロス、テイクプロフィットなどを調整できます。extern ENUM_TIMEFRAMES TF = PERIOD_CURRENT;// 時間枠の選択
extern int period = 8;// DeMarkerの期間
extern double lt = 0.01;// ロット数
extern int sl = 100;// ストップロス
extern int tp = 100;// テイクプロフィット
extern double OB = 0.7;// オーバーソールド
extern double OS = 0.3;// オーバーバウト
extern bool OPENBAR = false;// 新しいバーのオープンプライスで取引するか秘密は、変数を3つの部分に分けていることです:1. データ | 時間枠2. 注文3. ペア//+------------------------------------------------------------------+
//-- 時間枠 | インジケーター
double dmrk[5];
int signal =-1;//-- 0 = 買い, 1 = 売り
int hold = 0;
//-- 注文
int ticket =0;
double lot =0.0;
int typ =-1;
//-- ペア
datetime t1=0;
bool newbar=false;
bool entry =false;
//+------------------------------------------------------------------+OnInit()関数では、DeMarkerのインジケーター配列変数を初期化し、特定のブローカー要件に応じた最小ロットサイズを確認します。//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnInit()
{
ArrayInitialize(dmrk,0.0);
//---
const double test_lot = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
if(lt<test_lot) lt = test_lot;
}OnTick()関数では、インジケーターの計算と売買シグナルの判断を行います。//---------------------------------------------------------------------------
signal = -1;
//---------------------------------------------------------------------------
//---計算
for(int i=0; i<ArraySize(dmrk); i++)
{
dmrk[i] = iDeMarker(Symbol(),TF,period,i);
}
//---
if(dmrk[1] > OB)
{
hold = 1;//セット
}
else
if(dmrk[1] < OS)
{
hold = -1;//セット
}
else
{
hold = 0;//リセット
}
if(hold == 1)
{
if(dmrk[0]<OB && dmrk[1]>OB)
{
signal = OP_SELL;
}
}
if(hold == -1)
{
if(dmrk[0]>OS && dmrk[1]<OS)
{
signal = OP_BUY;
}
}買いと売りのシグナルを開くためのコードです...//---------------------------------------------------------------------------
if(signal != -1)
if(newbar==true)
if(entry==false)//ドアを開ける
{
//---
entry =true;//セット
//---
if(signal == OP_BUY)
{
ticket = OrderSend(Symbol(),OP_BUY,lt,Ask,(int)((Ask-Bid)/Point),
sl>0?Bid-sl*Point:0.0,
tp>0?Bid+tp*Point:0.0,
EAName+":signal= "+IntegerToString(signal)+":hold= "+IntegerToString(hold),
EANumber,
0,
clrBlue);
signal=-1;
//hold =0;
}//リセット
}//リセットシグナル
}
そして、クローズに関しては... if(entry == true) // クローズ
{
if(OrderSelect(ticket,SELECT_BY_TICKET))
{
if(OrderCloseTime() == 0)//-- アクティブな取引
{
/* クローズ条件 todo */
//entry = false;
}
//else
if(OrderCloseTime() != 0)//-- 手動またはSL/TP、EAでクローズ
{
entry = false;//リセットエントリー
}
}
}このEAを使えば、トレードの効率がかなり向上すると思います。ぜひ試してみてください!
2020.12.17