はじめに
今回は、MetaTrader 4で使えるエキスパートアドバイザー(EA)をご紹介します。このツールを使えば、目標利益を達成したり、損失を限定したりすることができます。さっそく見ていきましょう!
必要な設定項目
このEAには、次の3つの入力が必要です:
- 利益目標
- 損切り
- マジックナンバー
extern double inTargetProfitMoney = 10; //利益目標($) extern double inCutLossMoney = 0.0; //損切り($) extern int inMagicNumber = 0; //マジックナンバー
EAの初期化
EAが実行されると、まず OnInit() 関数が呼ばれます。この中で、入力値の確認を行います。
int OnInit() {
//---
if (inTargetProfitMoney <= 0) {
Alert("無効な入力");
return(INIT_PARAMETERS_INCORRECT);
}
inCutLossMoney = MathAbs(inCutLossMoney) * -1;
//---
return(INIT_SUCCEEDED);
}
価格変動の監視
価格が動くたびに、OnTick() 関数が呼ばれ、利益や損失の計算が行われます。
void OnTick() {
//---
double tFloating = 0.0;
int tOrder = OrdersTotal();
for (int i = tOrder - 1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderMagicNumber() == inMagicNumber) {
tFloating += OrderProfit() + OrderCommission() + OrderSwap();
}
}
}
if (tFloating >= inTargetProfitMoney || (tFloating <= inCutLossMoney && inCutLossMoney < 0)) {
fCloseAllOrders();
}
}
全注文をクローズする
OnTick() 関数では、利益または損失の合計を計算し、条件に合致する場合は全ての注文をクローズします。
void fCloseAllOrders() {
double priceClose = 0.0;
int tOrders = OrdersTotal();
for (int i = tOrders - 1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderMagicNumber() == inMagicNumber && (OrderType() == OP_BUY || OrderType() == OP_SELL)) {
priceClose = (OrderType() == OP_BUY) ? MarketInfo(OrderSymbol(), MODE_BID) : MarketInfo(OrderSymbol(), MODE_ASK);
if (!OrderClose(OrderTicket(), OrderLots(), priceClose, slippage, clrGold)) {
Print("WARNING: クローズ失敗");
}
}
}
}
}
まとめ
このようにして、利益目標や損切りを設定することで、トレードのリスクを効果的に管理できます!もっと詳しい情報やMQL4のコードに関する教育を受けたい方は、ぜひ私たちのTelegramグループ t.me/codeMQL に参加してください。