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

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

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

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

Q&A

2回答

782閲覧

int startの書く場所がわかりません。コンパイルできません。

cameraman

総合スコア0

MQL4

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

0グッド

0クリップ

投稿2022/10/10 05:24

前提

 MT4でリピート系のEAを作っています。
int start の場所が悪いようですが、どこに書き換えてもエラーとなってしまいます。(今はVoid on tickの下に書いています)

実現したいこと

ソースコードを整えてコンパイルできるようにする。

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

'start' - function declarations are allowed on global, namespace or class scope only

該当のソースコード

MQ4

1#property copyright "aaaa" 2#property link "https://www.mql5.com" 3#property version "1.00" 4 5 6//変数の宣言 7extern bool Start_Program = false; 8 9extern int Magic = 9696; 10 11extern double Lots = 0.1; 12 13extern int TP = 100; 14extern int SL = 100; 15 16extern int Interval = 50; 17extern int Slippage = 10; 18 19extern string Comments = "Repeat Order"; 20 21int Ticket = 0; 22 23double Pips =0; 24int Adjusted_Slippage =0; 25 26 //関数の定義 27double AdjustPoint(string Currency) 28{ 29 int Calculated_Digits = 30 (int)MarketInfo(Symbol(),MODE_DIGITS); 31 32 if(Calculated_Digits == 2 || Calculated_Digits == 3) 33 { 34 double Calculated_Point = 0.01; 35 } 36 else if(Calculated_Digits == 4 || 37 Calculated_Digits == 5) 38 { 39 Calculated_Point = 0.0001; 40 } 41 42 return(Calculated_Point); 43} 44 45int AdjustSlippage(string Currency,int Slippage_Pips) 46{ 47 int Calculated_Digits = 48 (int)MarketInfo(Symbol(),MODE_DIGITS); 49 50 if(Calculated_Digits == 2 || Calculated_Digits == 4) 51 { 52 int Calculated_Slippage = Slippage_Pips; 53 } 54 else if(Calculated_Digits == 3 || 55 Calculated_Digits == 5) 56 { 57 Calculated_Slippage = Slippage_Pips * 10; 58 } 59 60 return(Calculated_Slippage); 61} 62 63 64int init() 65{ 66Pips = AdjustPoint(Symbol()); 67Adjusted_Slippage = 68AdjustSlippage(Symbol(),Slippage); 69 70return(0); 71} 72 73//+------------------------------------------------------------------+ 74//| Expert initialization function | 75//+------------------------------------------------------------------+ 76 77//+------------------------------------------------------------------+ 78//| Expert deinitialization function | 79//+------------------------------------------------------------------+ 80void OnDeinit(const int reason) 81 { 82//--- 83 84 } 85//+------------------------------------------------------------------+ 86//| Expert tick function | 87//+------------------------------------------------------------------+ 88 89 90 91void OnTick() 92 { 93int start() 94{ 95if (Start_Program==true) 96 { 97 if(OrdersTotal()==0) 98 { 99 Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Adjusted_Slippage,0,0,Comments,Magic,0,Magenta); 100 101 if(Ticket>0) 102 { 103 if(OrderSelect(Ticket,SELECT_BY_TICKET==true) 104 { 105 bool Modified=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()- SL * Pips, 106 OrderOpenPrice()+TP*Pips,OrderExpiration(),clrNONE); 107 108 if(Modified==true) 109 { 110 Ticket=0; 111 } 112 } 113 } 114 } 115 else if(OrdersTotal()>=1) 116 { 117 if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES)==true) 118 { 119 if(Bid<=OrderOpenPrice()-Interval*Pips) 120 { 121 Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Adjusted_Slippage,0,0,Comments,Magic,0,Magenta); 122 123 if(Ticket>0) 124 { 125 if(OrderSelect(Ticket,SELECT_BY_TICKET)==true 126 { 127 Modified=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-SL*Pips, 128 OrderOpenPrice()+TP*Pips,OrderExpiration(),clrNONE); 129 130 if(Modified==true) 131 { 132 Ticket=0; 133 } 134 } 135 } 136 } 137 } 138 } 139 } 140 return(0); 141} 142//--- 143 144 }

試したこと

int start以下をグローバルの領域に書き換える。Void on tickを削除するなど。

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

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

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

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

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

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

guest

回答2

0

OnTics関数と、start関数はEAに於いて同一機能を持った関数定義です。
従って1つのEA内ではどちらかしか記述できません。
また、投稿されたコードでは、 OnTics関数の中に、start関数が記述された入れ子状態になっています。
関数が入れ子になった記述は出来ません。

投稿2022/10/10 07:36

yu-ima

総合スコア249

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

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

cameraman

2022/10/10 08:32

ありがとうございます。 void on tick() を消してみましたがエラーが増えてしまいます。 どうすればいいですか?
yu-ima

2022/10/10 11:37

最後の //--- } を消してください。 void OnTics()の 閉じかっこです。
guest

0

void on tickを削除すればいいと思います。

投稿2022/10/10 05:52

meett

総合スコア2

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

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

cameraman

2022/10/10 08:33

エラーが増えました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問