アプリ版:「スタンプのみでお礼する」機能のリリースについて

以前の質問内容からパラメーターをコピーし_2にしてからstart関数内に
同じようにコピーしましたが、2回目のエントリーの後、時間通りに決済ができません。
どなたか対策案教えてください。ここまでできるようになりましたが本当に困っております。
-----------------------------
int start()
{
if(OrdersTotal() == 0){
if((TimeHour(TimeCurrent()) == OrderHour || CheckOrderHour == false)&&(TimeMinute(TimeCurrent()) == OrderMinute || CheckOrderMinute == false) &&(TimeSeconds(TimeCurrent()) == OrderSeconds || CheckOrderSeconds == false))
{
if(Cmd == OP_BUY){
OrderSend(Symbol(),Cmd,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Red);
return(0);
}
if(Cmd == OP_SELL){
OrderSend(Symbol(),Cmd,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Blue);
return(0);
}
}
}
if((TimeHour(TimeCurrent()) == CloseHour || CheckCloseHour == false)&&(TimeMinute(TimeCurrent()) == CloseMinute || CheckCloseMinute == false)&&(TimeSeconds(TimeCurrent()) == CloseSeconds || CheckCloseSeconds == false))
{
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false)
{
break;
}
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);
return(0);
}
if(OrderType() == OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Lime);
return(0);
}
}
}
}
if(OrdersTotal() == 0){
if((TimeHour(TimeCurrent()) == OrderHour_2 || CheckOrderHour_2 == false)&&(TimeMinute(TimeCurrent()) == OrderMinute_2 || CheckOrderMinute_2 == false) &&(TimeSeconds(TimeCurrent()) == OrderSeconds_2 || CheckOrderSeconds_2 == false))
{
if(Cmd_2 == OP_BUY){
OrderSend(Symbol(),Cmd_2,Lots_2,Ask,Slippage_2,Ask-StopLoss_2*Point,Ask+TakeProfit_2*Point,"",MagicNumber_2,0,Red);
return(0);
{
if(Cmd_2 == OP_SELL){

OrderSend(Symbol(),Cmd_2,Lots_2,Bid,Slippage_2,Bid+StopLoss_2*Point,Bid-TakeProfit_2*Point,"",MagicNumber_2,0,Blue);
return(0);
}
}
}
if((TimeHour(TimeCurrent()) == CloseHour_2 || CheckCloseHour_2 == false)&&(TimeMinute(TimeCurrent()) == CloseMinute_2 || CheckCloseMinute_2 == false)&&(TimeSeconds(TimeCurrent()) == CloseSeconds_2 || CheckCloseSeconds_2 == false))
{
for(int s = 0; s < OrdersTotal(); s++)
{
if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES) == false)
{
break;
}
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_2)

{
if(OrderType() == OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage_2,Yellow);
return(0);
}
if(OrderType() == OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage_2,Lime);
return(0);
}
}
}
}
return(0);
}
}
}

A 回答 (3件)

(1)なぜ、最後に}が3つも並んでいるんでしょうか?


(2)見たところ、上記を除き課題が見受けられません。
  できればEA全体を掲示できませんか?

この回答への補足

いつも相談に乗って頂きありがとうございます。
文字数の関係でパラメーターを載せる事が出来ませんでしたが、
以下パラメーターを載せますので前のプログラムと合わせて見て下さい。
宜しくお願いします。
-----------------------------------------------------

extern string X = "Basic Settings"; //基本設定

extern int MagicNumber = 1001; //マジックナンバー

extern double TakeProfit = 150; //リミット[pips]

extern double StopLoss = 150; //ストップ[pips]

extern double Lots = 0.1; //ロットサイズ

extern int Cmd = OP_BUY; //エントリー方法[OP_BUY/OP_SELL]

extern int Slippage = 30; //スリッページ



extern string XX = "Order Settings"; //新規注文設定

extern bool CheckOrderHour = true; //時間の判定有無

extern int OrderHour = 1; //時間

extern bool CheckOrderMinute = true; //分の判定有無

extern int OrderMinute = 5; //分

extern bool CheckOrderSeconds = true; //秒の判定有無

extern int OrderSeconds = 0; //秒



extern string XXX = "Close Settings"; //決済注文設定

extern bool CheckCloseHour = true; //時間の判定有無

extern int CloseHour = 1;//時 //時間

extern bool CheckCloseMinute = true; //分の判定有無

extern int CloseMinute = 10;//分 //分

extern bool CheckCloseSeconds = true; //秒の判定有無

extern int CloseSeconds = 0;//秒 //秒



extern string X_2 = "Basic Settings"; //基本設定

extern int MagicNumber_2 = 1001; //マジックナンバー

extern double TakeProfit_2 = 150; //リミット[pips]

extern double StopLoss_2 = 150; //ストップ[pips]

extern double Lots_2 = 0.1; //ロットサイズ

extern int Cmd_2 = OP_BUY; //エントリー方法[OP_BUY/OP_SELL]

extern int Slippage_2 = 30; //スリッページ



extern string XX_2 = "Order Settings"; //新規注文設定

extern bool CheckOrderHour_2 = true; //時間の判定有無

extern int OrderHour_2 = 2; //時間

extern bool CheckOrderMinute_2 = true; //分の判定有無

extern int OrderMinute_2 = 5; //分

extern bool CheckOrderSeconds_2 = true; //秒の判定有無

extern int OrderSeconds_2 = 0; //秒



extern string XXX_2 = "Close Settings"; //決済注文設定

extern bool CheckCloseHour_2 = true; //時間の判定有無

extern int CloseHour_2 = 2;//時 //時間

extern bool CheckCloseMinute_2 = true; //分の判定有無

extern int CloseMinute_2 = 10;//分 //分

extern bool CheckCloseSeconds_2 = true; //秒の判定有無

extern int CloseSeconds_2 = 0;//秒 //秒

補足日時:2013/07/06 12:55
    • good
    • 0

まずは安心して下さい。

バグを見つけました。

さて、私は先に2つの指摘をしました。
あなたは一つ目の指摘に答えておりません。

(Q)なぜ、最後に3つも}を書いたのですか?

プログラムを書く上でやってはいけない禁じ手ですね。
勝手に文法を作ってはいけません。
    • good
    • 0

}を重ねた理由も分かりますので、もったいぶらずにお話ししますね。



バグの箇所は、
if(Cmd_2 == OP_BUY){
OrderSend(Symbol(),Cmd_2,Lots_2,Ask,Slippage_2,Ask-StopLoss_2*Point,Ask+TakeProfit_2*Point,"",MagicNumber_2,0,Red);
return(0);
{

の最後のカッコが逆になっているのです。正しくは、}ですね。

このバグが分からなかったため、プログラムの最後に}を重ねて辻褄を合わせたのだと思います。
あなたにとっては残念ながら、それでエラーが出なくなってしまったのですね。

さて、
コンパイル時によく{}や()関係のエラーが出ますが、徒にカッコを増やして様子を見るのではなく、プログラム自体をつぶさに観察してバグの発見に努めましょう。
簡単なことです。99%の確率で、どこかに{}()が足りないか、多すぎるのですから。。。

では、また。
    • good
    • 0
この回答へのお礼

これですべて解決しました。本当にありがとうござます。<m(__)m>

エラーメッセージがないので気づかないものですね。

お礼日時:2013/07/09 13:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!