前提・実現したいこと
買いのポジションを所持中または買いの待機注文を所持している時に売りの条件がみたされたら買いのポジションと待機注文を一度決済したい。
発生している問題・エラーメッセージ
'OrderClose' - function declarations are allowed on global, namespace or class scope only
該当のソースコード
MQL4
1void OnTick() 2{ 3 //前日足の四本値 4 double H1 = iHigh(NULL,0,1); 5 double L1 = iLow(NULL,0,1); 6 double O1 = iOpen(NULL,0,1); 7 double C1 = iClose(NULL,0,1); 8 9 //最高値 10 int highestprice = iHighest(NULL,PERIOD_D1,MODE_HIGH,20,1); 11 12 //最高値の4本値 13 double highestH = iHigh(NULL,0,highestprice); 14 double highestL = iLow(NULL,0,highestprice); 15 double highestO = iOpen(NULL,0,highestprice); 16 double highestC = iClose(NULL,0,highestprice); 17 18 //最安値 19 int cheapestprice = iLowest(NULL,PERIOD_D1,MODE_LOW,20,1); 20 21 //最安値の4本値 22 double cheapestH = iHigh(NULL,0,cheapestprice); 23 double cheapestL = iLow(NULL,0,cheapestprice); 24 double cheapestO = iOpen(NULL,0,cheapestprice); 25 double cheapestC = iClose(NULL,0,cheapestprice); 26 27 //損切値制限 28 double buyson = cheapestH-cheapestL; 29 double sellson = highestH-highestL; 30 31 //週足の四本値 32 double WH1 = iHigh(NULL,PERIOD_W1,1); 33 double WL1 = iLow(NULL,PERIOD_W1,1); 34 double WO1 = iOpen(NULL,PERIOD_W1,1); 35 double WC1 = iClose(NULL,PERIOD_W1,1); 36 37 //前週足の四本値 38 double WH2 = iHigh(NULL,PERIOD_W1,2); 39 double WL2 = iLow(NULL,PERIOD_W1,2); 40 double WO2 = iOpen(NULL,PERIOD_W1,2); 41 double WC2 = iClose(NULL,PERIOD_W1,2); 42 43 //月足の四本値 44 double MNH1 = iHigh(NULL,PERIOD_MN1,1); 45 double MNL1 = iLow(NULL,PERIOD_MN1,1); 46 double MNO1 = iOpen(NULL,PERIOD_MN1,1); 47 double MNC1 = iClose(NULL,PERIOD_MN1,1); 48 49 //前月足の四本値 50 double MNH2 = iHigh(NULL,PERIOD_MN1,2); 51 double MNL2 = iLow(NULL,PERIOD_MN1,2); 52 double MNO2 = iOpen(NULL,PERIOD_MN1,2); 53 double MNC2 = iClose(NULL,PERIOD_MN1,2); 54 55 int ticketB = 0; 56 int ticketS = 0; 57 58//////////////////////////////////////////////////////////////////////////////////////////////////////////// 59if(highestL > C1 && ticketB > 1)//買いのポジションまたは買いの待機注文があるときに、売りの条件が発生したら決済 60{ 61bool OrderClose(ticketB,lots,C1,10,Red); 62bool OrderDelete(ticketB,Red); 63} 64 65if(cheapestH < C1 && ticketS > 1)//売りのポジションまたは売りの待機注文があるときに、売りの条件が発生したら決済 66{ 67bool OrderClose(ticketS,lots,C1,10,Red); 68bool OrderDelete(ticketS,Red); 69} 70 71if(ticketB <= 0 && ticketS<=0)//ポジションと待機注文がないなら 72{ 73 if(cheapestH < C1 && MarketInfo(NULL,MODE_SPREAD) < maxspread)//買いの条件・現在のスプレッド・スプレッド上限 74 { 75 ticketB = OrderSend(//買いの処理 76 Symbol(),//通貨ペア 77 OP_BUYLIMIT,//買いの指値 78 lots,//ロット数 79 cheapestH,//注文価格 80 10,//スリップページ 81 cheapestL,//損切 82 0,//利確 83 NULL,//コメント 84 1111,//マジックナンバー 85 closeperiod,//有効期限 86 Magenta//色 87 ); 88 } 89 90//////////////////////////////////////////////////////////////////////////////////////////////////////////// 91 if(highestL > C1 && MarketInfo(NULL,MODE_SPREAD) < maxspread)//売りの条件・現在のスプレッド・スプレッド上限 92 { 93 ticketS = OrderSend(//売りの処理 94 Symbol(),//通貨ペア 95 OP_SELLLIMIT,//売りの指値 96 lots,//ロット数 97 highestL,//注文価格 98 10,//スリップページ 99 highestH,//損切 100 0,//利確 101 NULL,//コメント 102 1111,//マジックナンバー 103 closeperiod,//有効期限 104 Magenta//色 105 ); 106 } 107} 108//////////////////////////////////////////////////////////////////////////////////////////////////////////// 109} 110
試したこと
グローバル、ネームスペース、またはクラススコープでのみ関数宣言が許可されます.
とエラーがでたのですが意味がよくわからず。
試したことはOnTickの外に決済のコードをだしてみたりしたのですが同じエラーがでました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/08 10:53
2020/09/08 11:25
2020/09/08 12:07