注文を送るのが難しい。 - ページ 2

 
"2014.04.02 00:19:50.590 2010.10.15 00:00:00 失敗した為替買い 0.07 GBPUSD at 1.60082[無効なボリューム]"

 
MetaNt:
"2014.04.02 00:19:50.590 2010.10.15 00:00:00 失敗した為替買い 0.07 GBPUSD at 1.60082 [無効なボリューム]"

GBPUSDチャート 上でこの小さなスクリプトを実行し、その結果を報告してください。

void OnStart()
  {
   printf("Volume min = %f, volume step = %f for symbol %s.",
          SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),
          SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP),
          _Symbol);

  }
 
angevoyageur:

この小さなスクリプトをGBPUSDのチャートで実行し、結果を報告してください。

すみません、投稿を見ませんでした。mql4版のデモモードで抱えていた問題を処理していたのです。

私はスクリプトを実行します。

 

報告書

"2014.04.02 15:11:27.158 Lot (GBPUSD,D1) Volume min = 0.010000, volume step = 0.010000 forsymbol GBPUSD."

 
MetaNt:

報告書

"2014.04.02 15:11:27.158 Lot (GBPUSD,D1) Volume min = 0.010000, volume step = 0.010000 for symbol GBPUSD."

変な感じですね。ordersendの呼び出しや エラー処理(印刷)など、関連するコードをすべて掲載していただけないでしょうか?
 
angevoyageur:
それは奇妙です。ordersendの呼び出しやエラー処理(印刷)など、関連するコードをすべて掲載できますか?

はい、ご要望の通り、以下の通りです。

Lot=LotSize/8;


MqlTradeResult StageOneBuyRes={0};
MqlTradeRequest StageOneBuy={0};

StageOneBuy.action=TRADE_ACTION_DEAL;  
StageOneBuy.magic=MagicNumber;  
StageOneBuy.symbol=_Symbol;            // symbol
StageOneBuy.volume=Lot;
StageOneBuy.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
StageOneBuy.sl=0;                  // Stop Loss is not specified
StageOneBuy.tp=0;                 // Take Profit is not specified 
StageOneBuy.deviation =7;  
StageOneBuy.type=ORDER_TYPE_BUY; // order type
StageOneBuy.type_filling = ORDER_FILLING_FOK;
StageOneBuy.comment = "test";
 

MqlTradeResult StageOneSellRes={0};
MqlTradeRequest StageOneSell={0};

StageOneSell.action=TRADE_ACTION_DEAL;  
StageOneSell.magic=MagicNumber;  
StageOneSell.symbol=_Symbol;            // symbol
StageOneSell.volume=Lot;
StageOneSell.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
StageOneSell.sl=0;                  // Stop Loss is not specified
StageOneSell.tp=0;                 // Take Profit is not specified 
StageOneSell.deviation =7;  
StageOneSell.type=ORDER_TYPE_SELL; // order type
StageOneSell.type_filling = ORDER_FILLING_FOK;
StageOneSell.comment = "test";

if(SymbolInfoInteger(_Symbol,SYMBOL_SESSION_DEALS)==0){if(OrderSend(StageOneBuy,StageOneBuyRes))buyticket1=(int)OrderGetInteger(ORDER_POSITION_ID);}
       if(buyticket1>0){Print("Order Placed ","Order Ticket ", buyticket1," Order Lots ",OrderGetDouble(ORDER_VOLUME_INITIAL));return;}else{Print("Order Placement Unsuccessful ", GetLastError());return;}

if(SymbolInfoInteger(_Symbol,SYMBOL_SESSION_DEALS)==0){if(OrderSend(StageOneSell,StageOneSellRes))sellticket1=(int)OrderGetInteger(ORDER_POSITION_ID);}
       if(sellticket1>0){Print("Order Placed ","Order Ticket ", sellticket1," Order Lots ", OrderGetDouble(ORDER_VOLUME_INITIAL));return;}else{Print("Order Placement Unsuccessful ", GetLastError());return;}
 
MetaNt:

はい、ご要望の通り、以下の通りです。


このコードは正しくないので、そのまま使うことはできません。

buyticket1=(int)OrderGetInteger(ORDER_POSITION_ID);

StageOneBuyRes構造体を使用して、注文/取引に関する情報を取得する必要があります。主にretcodeを確認する必要がありますが、OrderSend()の使用例については、ドキュメントを参照 するか、サイトを検索してください、mql4のようには動作しません。

あなたのコードは、おそらくエラーがないところでエラーを返しているのでしょう。ターミナルでポジションが開いているか増えているか確認しましたか?

余談ですが、このトピックとは関係なく、以下のコードはおそらくあなたが考えているようなことはしません。

SymbolInfoInteger(_Symbol,SYMBOL_SESSION_DEALS)
 

そうですね、修正します。

ターミナルを確認しても、バックテスト 結果が表示されないのですが、どういうことでしょうか

 
MetaNt:

そうですね、修正します。

ターミナルを確認しても、バックテスト結果が表示されないのですが、どういうことでしょうか

あ、そうですか、バックテスト だったとは気づきませんでした。
 
angevoyageur:

このコードは正しくありません、あなたのように使用することはできません。

StageOneBuyRes 構造体を使用して、注文/取引に関する情報を取得する必要があります。主にretcodeを確認する必要があります。OrderSend()の使用例についてはドキュメントを見るか サイトを検索してください。mql4のようにはいきません。


Btw これはどのようにエラーが表示されるのでしょうか?