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

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

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

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

Q&A

解決済

1回答

2254閲覧

参考サイトに書かれているコードの問題点がわからない

nisei2

総合スコア19

MQL4

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

0グッド

0クリップ

投稿2020/09/17 09:53

編集2020/09/18 07:46

前提・実現したいこと

参考サイト通りに記述したのですがエラーがかなり発生してしまいました、大半はなんとか解決できたのですがこの2つだけがどうしてもわかりません。

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

'return' - 'void' function returns a value//最後の部分

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#property copyright"詳解MT4" 6#property link"http://mt4-traders.com" 7 8//変数の宣言 9extern int Magic = 1515; 10extern int Break_Period = 24; 11extern double Lots = 0.1; 12extern int Slippage = 10; 13extern string Comments = "Break Out"; 14extern int Trailing_Stop = 50; 15 16int Buy_Ticket = 0; 17int Sell_Ticket = 0; 18double Pips = 0; 19int Adjusted_Slippage = 0; 20 21//関数の定義 22//関数1 23double AdjustPoint(string Currency) 24 { 25 double Calculated_Point; 26 int Symbol_Digits = MarketInfo(Currency,MODE_DIGITS); 27 if(Symbol_Digits == 2 || Symbol_Digits == 3) 28 { 29 Calculated_Point = 0.01; 30 } 31 else if(Symbol_Digits == 4 || Symbol_Digits == 5) 32 { 33 Calculated_Point = 0.0001; 34 } 35 return(Calculated_Point); 36} 37 38//関数2 39int AdjustSlippage(string Currency,int Slippage_Pips) 40 { 41 int Calculated_Slippage; 42 int Symbol_Digits = MarketInfo(Currency,MODE_DIGITS); 43 if(Symbol_Digits == 2 || Symbol_Digits == 4) 44 { 45 Calculated_Slippage = Slippage_Pips; 46 } 47 else if(Symbol_Digits== 3 || Symbol_Digits == 5) 48 { 49 Calculated_Slippage = Slippage_Pips*10; 50 } 51 return(Calculated_Slippage); 52} 53 54int OnInit() 55 { 56 Pips = AdjustPoint(Symbol()); 57Adjusted_Slippage = AdjustSlippage(Symbol(),Slippage); 58return(0); 59 } 60 61void OnDeinit(const int reason) 62 { 63 } 64 65void OnTick() 66{ 67 //チケット番号の初期化 68 if(OrdersTotal()==0) 69 { 70 Buy_Ticket=0; 71 Sell_Ticket=0; 72 } 73//クローズ処理 74//ポジション保有の確認 75if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==true) 76 { 77 //ロングポジションクローズ 78 if(OrderType()==OP_BUY) 79 { 80 if(Close[0]<Low[iLowest(Symbol(),0,MODE_LOW,Break_Period,1)] && OrderCloseTime()==0) 81 { 82 bool Closed = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Adjusted_Slippage,Magenta); 83 if(Closed==true) 84 { 85 Buy_Ticket=0; 86 } 87 } 88 } 89 //ショートポジションクローズ 90 else if(OrderType()==OP_SELL) 91 { 92 if(Close[0]>High[iHighest(Symbol(),0,MODE_HIGH,Break_Period,1)] && OrderCloseTime()==0) 93 { 94 bool Closed = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Adjusted_Slippage,Aqua); 95 if(Closed==true) 96 { 97 Sell_Ticket=0; 98 } 99 } 100 } 101 } 102 103 //エントリー処理 104 //ロングエントリー 105 if(Close[0]>High[iHighest(NULL,0,MODE_HIGH,Break_Period,1)] && OrdersTotal()==0) 106 { 107 Buy_Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Adjusted_Slippage,0,0,Comments,Magic,0,Magenta); 108 } 109 110 //ショートエントリー 111 if(Close[0]<Low[iLowest(NULL,0,MODE_LOW,Break_Period,1)] && OrdersTotal()==0) 112 { 113 Sell_Ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Adjusted_Slippage,0,0,Comments,Magic,0,Aqua); 114 } 115 116 //トレイリングストップ 117 if(Buy_Ticket>0 || Sell_Ticket>0) 118 { 119 for(int i=OrdersTotal()-1; i>=0; i--) 120 { 121 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) 122 { 123 //買いポジションの場合 124 if(OrderType()==OP_BUY) 125 { 126 double Max_Stop_Loss = Bid-Trailing_Stop*Pips; 127 Max_Stop_Loss = NormalizeDouble(Max_Stop_Loss,MarketInfo(Symbol(),MODE_DIGITS)); 128 double Current_Stop=NormalizeDouble(OrderStopLoss(),MarketInfo(Symbol(),MODE_DIGITS)); 129 130 //損切価格の変更 131 if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol() && Current_Stop<Max_Stop_Loss) 132 { 133 bool Modified=OrderModify(OrderTicket(),OrderOpenPrice(),Max_Stop_Loss,0,0); 134 } 135 } 136 //売りポジションの場合 137 else if(OrderType()==OP_SELL) 138 { 139 double Max_Stop_Loss=Ask+Trailing_Stop*Pips; 140 Max_Stop_Loss=NormalizeDouble(Max_Stop_Loss,MarketInfo(Symbol(),MODE_DIGITS)); 141 double Current_Stop=NormalizeDouble(OrderStopLoss(),MarketInfo(Symbol(),MODE_DIGITS)); 142 143 //損切価格の変更 144 if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol() && (Current_Stop>Max_Stop_Loss || Current_Stop==0)) 145 { 146 double Modified=OrderModify(OrderTicket(),OrderOpenPrice(),Max_Stop_Loss,0,0); 147 } 148 } 149 } 150 } 151 } 152return(0); 153}

試したこと

スペルチェック

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

https://mt4-traders.com/wp-content/uploads/2018/12/Break-Out-EA.pdf ←参考にしたもの

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

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

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

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

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

dodox86

2020/09/17 10:06

MQL4に詳しい訳ではないのですが、本当に参考サイト通り(そのまま)に記述していますか? コードのインデントなどが崩れているので分かりづらいかもしれませんが、カッコの対応が正しく取れていなかったりグチャグチャになっています。再度見直してみてください。
nisei2

2020/09/17 21:59

ありがとうございます。見直してみることにします。
guest

回答1

0

ベストアンサー

'Calculated_Point' - undeclared identifier//関数の部分
については、if および else if の中で double Calculated_Point と宣言しており、
else の時に宣言されていないことからエラーになっています。
なので、以下の様に宣言は if の外に置く必要があります。

mq4

1double AdjustPoint(string Currency) 2{ 3 double Calculated_Point; 4 int Symbol_Digits = MarketInfo(Currency,MODE_DIGITS); 5 if(Symbol_Digits == 2 || Symbol_Digits == 3) 6 { 7 Calculated_Point = 0.01; 8 } 9 else if(Symbol_Digits == 4 || Symbol_Digits == 5) 10 { 11 Calculated_Point = 0.0001; 12 } 13 return(Calculated_Point); 14}

'return' - 'void' function returns a value//最後の部分
については、そもそも中括弧の数が合っていないので何かの関数から中途半端に抜き出されていることが問題です。
関数全体を記述する必要があります。

投稿2020/09/17 10:08

buibui80

総合スコア1033

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

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

nisei2

2020/09/17 22:00

ありがとうございます。関数のエラーはなくなりました。 関数全体を記述とはどういうことでしょうか?
buibui80

2020/09/18 03:48

関数全体とは以下の様に関数の宣言と内容を含めた全てを指します。 void 関数名() { // 関数の内容 } 参考サイトの内容を記述したとありますが、回答者側には参考サイトの内容を確認する手段がないので 関数全体を記述するか、補足情報として参考サイトのURLを記述してもらえれば良い回答が得られると思います。
nisei2

2020/09/18 07:50

参考元サイトを記入したつもりだったのですが記入できてませんでした、本当にすみません。 訂正してみたのですがもしまた何か記入漏れなどがありましたらすぐ訂正します。
buibui80

2020/09/18 08:39

'return' - 'void' function returns a value//最後の部分 戻り値を返さない関数が戻り値を返しているエラーですね(voidは戻り値を返さない) なので、最後のreturn(0);を削除してコンパイルしたらエラーは消えます。 関数のOnInit()、OnDeinit()、OnTick()はMT4のイベント関数です。 他にもイベント関数はありますがこれらの役割を知っておく方が習得はスムーズだと思います。
nisei2

2020/09/18 08:59

解決できました。いろいろ教えてくださりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問