{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory(Request);
ZeroMemory(Results);
Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
Request.action=TRADE_ACTION_DEAL;
Request.type=ORDER_TYPE_SELL;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res=false;
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0) return(true);
else return(false);
}
return(false);
}
先日、注文のやり直しの問題を提起しました。1週間はすべて順調に動いていたので、問題が解決したと思っていました。しかし、今日、開くときだけ同じような問題が発生しました。
Finamでは非常に多くの注文が、Otkritieでは9つの注文が開始されました...ただし、すべてのケースで1つの注文しか開始されていないはずです。
以下は、EAからのコードスニペットです。
{
Coment="Open Sell "+string(OpenOrders+1);
ret=OpenSellPosition(_Symbol,volume,Coment,Sleeppage,Filling);
}
if(ret)
{
OpenOrders++;
PriceLastOpen=price;
}
bool OpenSellPosition(string symbol, double volume, string comment="", ulong deviation=10, ENUM_ORDER_TYPE_FILLING filling=ORDER_FILLING_FOK)
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory(Request);
ZeroMemory(Results);
Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
Request.action=TRADE_ACTION_DEAL;
Request.type=ORDER_TYPE_SELL;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res=false;
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0) return(true);
else return(false);
}
return(false);
}
つまり、操作が成功すれば、変数OpenOrdersが 増加し、最初は0に なることがコードからわかる。
0より大きい場合は、それ以上の注文のオープンはないはずですが、Order1というコメントで注文の山全体がオープンされます。
注文を 開く関数で肯定的な応答があるかどうか、注文チケットが届いているかどうかをチェック しますが、実際には注文が設定されているにもかかわらず、なぜかこの関数はfalseを返します。
何が問題で、どうすればこの問題を解決できるのか、説明してもらえますか?
悪いFXの遺産。
Resultsを 確認する必要があります。の注文を受け付けています。
注文があったとしても、すでに取引が成立しているわけではありません。
悪いFXの遺産。
チェックしなければなりません。の注文を受け付けています。
注文が出されても、すでに取引が成立しているわけではありません。
取引に関する情報はまだ届いていないのでしょう。ここ(赤で 示した部分)は、運に頼っていることになります。そして、彼女は気まぐれな女性なのです :-))
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory(Request);
ZeroMemory(Results);
Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
Request.action=TRADE_ACTION_DEAL;
Request.type=ORDER_TYPE_SELL;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res=false;
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0) return(true);
else return(false);
}
return(false);
}
取引に関する情報はまだ届いていないのでしょう。ここ(赤で 示した部分)は、運に頼っていることになります。そして、彼女は気まぐれな女性なのです :-))
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory(Request);
ZeroMemory(Results);
Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
Request.action=TRADE_ACTION_DEAL;
Request.type=ORDER_TYPE_SELL;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res=false;
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0) return(true);
else return(false);
}
return(false);
}
すべてのトレードを 記録する必要があります。例えば、こんな風に。
まず "ヘッダー "でCTradeのトレードクラスと接続します。
CTrade m_trade; // trading object
で、以下はBuyの操作例です。
{
if(m_trade.ResultDeal()==0)
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
else
Print("Buy -> true. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
}
else
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
つまり、最初のレベル:オペレーションが基本的なチェックを 通過しなかった、2番目のレベル:トレードのチケットのチェック、という2つのエラーが発生する可能性があるのです。
そして、何か問題があれば、そのログを元に解決することができます。
追記:上記はSYNCの動作モードの場合です。
今ならここの達人も教えてくれますよ ))
Объясните что не так, как решить данную проблему?
あなたの経験では、ここでそのような質問をするのは見苦しいです。
すべてのトレードを 記録する必要があります。例えば、こんな風に。
まず "ヘッダー "でCTradeのトレードクラスと接続します。
CTrade m_trade; // trading object
で、以下はBuyの操作例です。
{
if(m_trade.ResultDeal()==0)
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
else
Print("Buy -> true. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
}
else
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
つまり、最初のレベル:オペレーションが基本的なチェックを 通過しなかった、2番目のレベル:トレードのチケットのチェック、という2つのエラーが発生する可能性があるのです。
そして、何か問題があれば、そのログを元に解決することができます。
追記:上記はSYNCの動作モードの場合です。
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0) return(true);
else return(false);
}
return(false);
すべてのトレードを 記録する必要があります。例えば、こんな風に。
まず "ヘッダー "でCTradeのトレードクラスと接続します。
CTrade m_trade; // trading object
で、以下はBuyの操作例です。
{
if(m_trade.ResultDeal()==0)
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
else
Print("Buy -> true. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
}
else
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
つまり、最初のレベル:オペレーションが基本的なチェックを 通過しなかった、2番目のレベル:トレードのチケットのチェック、という2つのエラーが発生する可能性があるのです。
そして、何か問題があれば、そのログを元に解決することができます。
追記:SYNCの動作モードでも同様です。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
先日、注文の再開についてトピックを立てました。1週間ほど順調に動作していたので、問題は解決したと思っていました。しかし、今日、開くときだけ同じような問題が発生しました。
Finamでは多くの注文が、Otkritieでは9つの注文が開きました...いずれも1つの注文しか開いていないはずですが。
以下は、EAからのコードスニペットです。
{
Coment="Open Sell "+string(OpenOrders+1);
ret=OpenSellPosition(_Symbol,volume,Coment,Sleeppage,Filling);
}
if(ret)
{
OpenOrders++;
PriceLastOpen=price;
}
bool OpenSellPosition(string symbol, double volume, string comment="", ulong deviation=10, ENUM_ORDER_TYPE_FILLING filling=ORDER_FILLING_FOK)
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory(Request);
ZeroMemory(Results);
Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
Request.action=TRADE_ACTION_DEAL;
Request.type=ORDER_TYPE_SELL;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res=false;
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0) return(true);
else return(false);
}
return(false);
}
つまり、操作が成功すれば、変数OpenOrdersが 増加し、最初は0に なることがコードからわかる。
0より大きい場合は、それ以上の注文のオープンはないはずですが、Order1というコメントで注文の山全体がオープンされます。
注文を 開く関数で肯定的な応答があるかどうか、注文チケットが届いているかどうかをチェック しますが、実際には注文が設定されているにもかかわらず、なぜかこの関数はfalseを返します。
何が問題なのか、どうすれば解決できるのかを説明してください。