前提
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/ツールのバージョンなど)

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/10/10 08:32
2022/10/10 11:37