実現したいこと
//+------------------------------------------------------------------+
//| RVI_trade.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020,Yano"
#property link "https://www.fx-doremi.com/"
#property version "1.00"
#property strict
#define MAGIC 202005240933
extern int average_period = 7; //RVIの期間
extern double Lots = 0.1; //ロット
extern int Slippage = 30; //スリッページ
extern double Profitrate = 0.0005; //利確(0.00025=0.025%)
extern double SLrate = 0.0005; //損切り(0.00025=0.025%)
double before_closs_rvi = 0;
//フラグ
int Buy_flg = 0;
int Sell_flg = 0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
before_closs_rvi = 0;
Buy_flg = 0;
Sell_flg = 0;
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
//変数
//現在の値
double now_rvi; //RVI
double now_signal; //シグナル
double now_rvi_1min;
double now_signal_1min;
//1ティック前の値 double before_rvi; //RVI double before_signal; //シグナル double before_rvi_1min; //RVI double before_signal_1min; //シグナル //トレード可能かチェック
// if(Volume[0]>1 || IsTradeAllowed()==false){
// Print("トレード不可");
// return;
// }
//現在値取得 //RVI now_rvi = iRVI(NULL,PERIOD_CURRENT,average_period,MODE_MAIN,0); now_rvi_1min = iRVI(NULL,PERIOD_MN1,average_period,MODE_MAIN,0); //シグナル now_signal = iRVI(NULL,PERIOD_CURRENT,average_period,MODE_SIGNAL,0); now_signal_1min = iRVI(NULL,PERIOD_MN1,average_period,MODE_SIGNAL,0); //1ティック前の情報取得 //RVI before_rvi = iRVI(NULL,PERIOD_CURRENT,average_period,MODE_MAIN,1); before_rvi_1min = iRVI(NULL,PERIOD_MN1,average_period,MODE_MAIN,1); //シグナル before_signal = iRVI(NULL,PERIOD_CURRENT,average_period,MODE_SIGNAL,1); before_signal_1min = iRVI(NULL,PERIOD_MN1,average_period,MODE_SIGNAL,1); //★2020-5-25 追記 ボリンジャーバンド2σ上下の幅が指定値以下? int check_bb_band2 = Check_BB_bands2_width(0.05); //順張り //ボラティリティ拡大なのでロング if(before_signal < 0 && now_signal >= 0 && Buy_flg == 0 && check_bb_band2 == 1){ // レートのリフレッシュ RefreshRates(); //ロングエントリー処理 OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask*(1-SLrate),Ask*(1+Profitrate),"Buy order",MAGIC,0,Blue); Buy_flg = 1; } //ボラティリティ縮小なのでショート if(before_signal > 0 && now_signal <= 0 && Sell_flg == 0 && check_bb_band2 == 1){ // レートのリフレッシュ RefreshRates(); //shortエントリー処理 OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid*(1+SLrate),Bid*(1-Profitrate),"Sell order",MAGIC,0,Red); Sell_flg = 1; } //メインとシグナルのゴールデンクロス if( (before_signal > before_rvi) && //1ティック前がシグナルのほうが大きい? (now_signal <= now_rvi) //クロスした? ){ //利確していなかったらポジション決済 ClosePositions_SELL(); Sell_flg = 0; } //メインとシグナルのデッドクロス if ( (before_signal < before_rvi) && //1ティック前がメインのほうが大きい? (now_signal >= now_rvi) //クロスした? ){ //利確していなかったらポジション決済 ClosePositions_BUY(); Buy_flg = 0; }
/* --- 騙し判定未実装のためコメントアウト
//逆張り //メインとシグナルのゴールデンクロス if( (before_signal > before_rvi) && //1ティック前がシグナルのほうが大きい? (now_signal <= now_rvi) && //クロスした? (check_bb_band2 == 1) //★追記 ボリンジャーバンドの幅が狭くない? ){ //利確していなかったらポジション決済 ClosePositions_SELL(); // レートのリフレッシュ RefreshRates(); //ロングエントリー処理 OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask*(1-SLrate),Ask*(1+Profitrate),"Buy order",MAGIC,0,Blue); //★追記 クロスした時のRVIを格納 before_closs_rvi = now_rvi; } //メインとシグナルのデッドクロス if ( (before_signal < before_rvi) && //1ティック前がメインのほうが大きい? (now_signal >= now_rvi) && //クロスした? (check_bb_band2 == 1) //★追記 ボリンジャーバンドの幅が狭くない? ){ //利確していなかったらポジション決済 ClosePositions_BUY(); // レートのリフレッシュ RefreshRates(); //ショートエントリー処理 OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid*(1+SLrate),Bid*(1-Profitrate),"Sell order",MAGIC,0,Red); //★追記 クロスした時のRVIを格納 before_closs_rvi = now_rvi; }
*/
}
//+------------------------------------------------------------------+
//| ポジション決済 |
//+------------------------------------------------------------------+
void ClosePositions_BUY(){
int i;
for(i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false){
break;
}
if(OrderMagicNumber() != MAGIC || OrderSymbol() != Symbol()){ continue; } //買いポジションのチェック if(OrderType() == OP_BUY){ OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,White); break; } // ループを抜ける break;
}
}
void ClosePositions_SELL(){
int i;
for(i=0;i<OrdersTotal();i++){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false){ break; } if(OrderMagicNumber() != MAGIC || OrderSymbol() != Symbol()){ continue; } //売りポジションのチェック if(OrderType() == OP_SELL){ OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White); break; } // ループを抜ける break; } } //+------------------------------------------------------------------+ //| ボリンジャーバンド幅のチェック //| 引数の指定値以上の場合 1を返す | //+------------------------------------------------------------------+ int Check_BB_bands2_width(double my_max){ int my_ret = 0; //2σボリンジャーバンド double bb_2 = iBands(NULL,PERIOD_CURRENT,20,2,0,PRICE_CLOSE,1,0); //-2σボリンジャーバンド double bb_M2 = iBands(NULL,PERIOD_CURRENT,20,2,0,PRICE_CLOSE,2,0); //バンド幅計算 double bb_haba = bb_2 - bb_M2; //一定値かどうかのチェック if(bb_haba > my_max){
my_ret = 1;
}
return my_ret;
}
//+------------------------------------------------------------------+
発生している問題・分からないこと
上記の215行1列 56行3列 にエラー表示です。
エラーメッセージ
error
1'}' - unexpected end of program ea yano.mq4 214 1 2'{' - unbalanced parentheses ea yano.mq4 52 3 3
該当のソースコード
mql5
1特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
chatgptに聞いて、エラー解消を試したが特によくならず
補足
特になし
あなたの回答
tips
プレビュー