質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

Q&A

解決済

1回答

4863閲覧

MQL4のエラーの解決法

nisei2

総合スコア19

MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

0グッド

0クリップ

投稿2020/09/04 08:24

編集2020/09/04 08:24

前提・実現したいこと

コンパイルしたらエラーがでてしまいどうしても解決できない。

発生している問題・エラーメッセージ

'if' - expressions are not allowed on a global scope 手法.mq4 150 9 'oncebar' - unexpected token, probably type is missing? 手法.mq4 184 9 'box' - undeclared identifier 手法.mq4 184 19 'oncebar' - variable already defined 手法.mq4 184 9 see previous declaration of variable 'oncebar' 手法.mq4 17 5 '}' - expressions are not allowed on a global scope 手法.mq4 186 4 declaration of 'box' hides global variable 手法.mq4 106 7 see previous declaration of 'box' 手法.mq4 184 19 'Ticket2' - undeclared identifier 手法.mq4 123 26 'ture' - undeclared identifier 手法.mq4 123 55 'Ticketw' - undeclared identifier 手法.mq4 125 36 implicit conversion from 'number' to 'string' 手法.mq4 145 49 '}' - semicolon expected 手法.mq4 147 11 'Ticket1' - undeclared identifier 手法.mq4 154 26 'ture' - undeclared identifier 手法.mq4 154 55 implicit conversion from 'number' to 'string' 手法.mq4 177 50 11 errors, 3 warnings 12 4

MQL4

1#property copyright "Copyright 2020, MetaQuotes Software Corp." 2#property link "https://www.mql5.com" 3#property version "1.00" 4#property strict 5 6 7 8 9 10extern int maxspread = 20;//スプレッド 11extern int closeperiod = 20;//有効期限 12extern double rot =0.1;//ロット 13 14//1本の足で1回の取引関係 15extern string onceonly= "--- entry only once per 1 bar --------------------------------"; 16extern bool entrybar = true;//trueにすれば、この機能が有効になる。 17int oncebar = 0;//前回の値動きの時の足の本数を格納しておくための変数 18 19 20 21 22 23 24int OnInit() 25 { 26 27 //1本の足で1回の取引関係 28 oncebar = Bars;//現在のチャートの足の本数を返す。 29 30 31 return(INIT_SUCCEEDED); 32 } 33 34 35 36 37 38 39void OnDeinit(const int reason) 40 { 41 42 } 43 44 45 46 47void OnTick() 48 { 49 50 //口座残高 51 //double AccountBalance(); 52 53 //前日足の四本値 54 double H1 = iHigh(NULL,0,1); 55 double L1 = iLow(NULL,0,1); 56 double O1 = iOpen(NULL,0,1); 57 double C1 = iClose(NULL,0,1); 58 59 //週足の四本値 60 double WH1 = iHigh(NULL,PERIOD_W1,1); 61 double WL1 = iLow(NULL,PERIOD_W1,1); 62 double WO1 = iOpen(NULL,PERIOD_W1,1); 63 double WC1 = iClose(NULL,PERIOD_W1,1); 64 65 //前週足の四本値 66 double WH2 = iHigh(NULL,PERIOD_W1,2); 67 double WL2 = iLow(NULL,PERIOD_W1,2); 68 double WO2 = iOpen(NULL,PERIOD_W1,2); 69 double WC2 = iClose(NULL,PERIOD_W1,2); 70 71 //月足の四本値 72 double MNH1 = iHigh(NULL,PERIOD_MN1,1); 73 double MNL1 = iLow(NULL,PERIOD_MN1,1); 74 double MNO1 = iOpen(NULL,PERIOD_MN1,1); 75 double MNC1 = iClose(NULL,PERIOD_MN1,1); 76 77 //前月足の四本値 78 double MNH2 = iHigh(NULL,PERIOD_MN1,2); 79 double MNL2 = iLow(NULL,PERIOD_MN1,2); 80 double MNO2 = iOpen(NULL,PERIOD_MN1,2); 81 double MNC2 = iClose(NULL,PERIOD_MN1,2); 82 83 //最高値 84 int highestprice = iHighest(NULL,PERIOD_D1,MODE_HIGH,20,1); 85 86 //最高値の4本値 87 double highestH = iHigh(NULL,0,highestprice); 88 double highestL = iLow(NULL,0,highestprice); 89 double highestO = iOpen(NULL,0,highestprice); 90 double highestC = iClose(NULL,0,highestprice); 91 92 //最安値 93 int cheapestprice = iLowest(NULL,PERIOD_D1,MODE_LOW,20,1); 94 95 //最安値の4本値 96 double cheapestH = iHigh(NULL,0,cheapestprice); 97 double cheapestL = iLow(NULL,0,cheapestprice); 98 double cheapestO = iOpen(NULL,0,cheapestprice); 99 double cheapestC = iClose(NULL,0,cheapestprice); 100 101 //損切値制限 102 double buyson = cheapestH-cheapestL; 103 double sellson = highestH-highestL; 104 105 //1本の足で1回の取引関係 106 int box = Bars; 107 108 // 仕掛けフィルター(1本の足で1回だけ仕掛ける) 109 if(oncebar) 110 { 111 // 新しい足を生成した時ではない場合は、仕掛けない 112 if(box == oncebar) 113 { 114 oncebar = box; 115 return; 116 } 117 } 118 119 if(cheapestH < C1 && MarketInfo(NULL,MODE_SPREAD) < maxspread)//買いの条件・現在のスプレッド・スプレッド上限 120 { 121 122 //買いポジションの決済 123 if(OrderSelect(Ticket2,SELECT_BY_TICKET) == ture) 124 { 125 bool close = OrderClose(Ticketw,rot,C1,10,Magenta); 126 } 127 128 129 int Ticket1 = OrderSend(//買いの処理 130 Symbol(),//通貨ペア 131 OP_BUYLIMIT,//買いの指値 132 rot,//ロット数 133 cheapestH,//注文価格 134 10,//スリップページ 135 cheapestL,//損切 136 0,//利確 137 NULL,//コメント 138 1212,//マジックナンバー 139 closeperiod,//有効期限 140 Magenta//色 141 ); 142 143 //通知 144 Alert("Buy",Symbol(),"at",Ask); 145 SendNotification("Buy"+Symbol()+"at"+Ask) 146 147 } 148 } 149 150 if(highestL > C1 && MarketInfo(NULL,MODE_SPREAD) < maxspread)//売りの条件・現在のスプレッド・スプレッド上限 151 { 152 153 //売りポジションの決済 154 if(OrderSelect(Ticket1,SELECT_BY_TICKET) == ture) 155 { 156 bool close = OrderClose(Ticket1,rot,C1,10,Magenta); 157 } 158 159 160 int Ticket2 = OrderSend(//売りの処理 161 Symbol(),//通貨ペア 162 OP_SELLLIMIT,//売りの指値 163 rot,//ロット数 164 highestL,//注文価格 165 10,//スリップページ 166 highestH,//損切 167 0,//利確 168 NULL,//コメント 169 1111,//マジックナンバー 170 closeperiod,//有効期限 171 Magenta//色 172 ); 173 174 if(Ticket1 > 0) 175 { 176 Alert("Sell",Symbol(),"at",Bid); 177 SendNotification("Sell"+Symbol()+"at"+Bid); 178 } 179 180 } 181 182 183 //1本の足で1回の取引関係 184 oncebar = box; 185 186 }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2020/09/04 08:33

なにも試していないようですが、 括弧の数くらい確認していますか。
nisei2

2020/09/04 08:40

括弧が一つ多かったみたいです、ありがとうございます。
1T2R3M4

2020/09/05 04:30 編集

解決したようでよかったです。 質問をClose(解決済に)してくださいね。
nisei2

2020/09/05 04:24

すいません、まだこのサイトの事がよくわからず質問を解決済みにする方法がわかりません。 どうしたら解決済みになるのでしょうか?
1T2R3M4

2020/09/05 04:34

質問したことないので正確にはわかりませんが、 回答からBEST ANSWERを選ぶとClose処理ができるのではないでしょうか。 最初の質問はCloseしてますよね。 回答がない場合は自身で回答つけて自己解決処理ができるはずです。
nisei2

2020/09/05 04:40

そうだったのですね、確かに最初ベストアンサーした記憶があります! しかし、前どうやってベストアンサーのボタンを出したのか思い出せません。 回答者さんのどこかにボタンがあるのでしょうか?
1T2R3M4

2020/09/05 04:48

回答してみたのでCloseしてみてください。
guest

回答1

0

ベストアンサー

//通知 Alert("Buy",Symbol(),"at",Ask); SendNotification("Buy"+Symbol()+"at"+Ask) } }

括弧が多いのではないでしょうか。

投稿2020/09/05 04:47

1T2R3M4

総合スコア114

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nisei2

2020/09/05 04:50

ありがとうございます!
1T2R3M4

2020/09/13 04:29 編集

おっ、マイナスが付いた。なぜ今頃。
nisei2

2020/09/13 04:31

覚えがないのでたぶんなにかの拍子に押してしまっただけだと思います、すみません。
1T2R3M4

2020/09/13 04:35

nisei2さんが押したのだったら、もう一度押すとキャンセルできますよ。 気を使っていただき、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問