どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 887

 
tuner:
void start()を実行すれば、エラーは発生しません。
ありがとうございました。エラーは出なくなったが、ポジションがまだ閉じない。
 
rapid_minus:
ありがとうございました。エラーは出なくなったが、ポジションがまだ閉じない。
何が原因かを正確に伝えるための十分なコードがない
 
tuner:
原因が何であるかを正確に知るための十分なコードがない


抜粋

void CritCloseBuy()
{
if (((Yellow_0-Red_0)<(Yellow_1-Red_1) && ((MA_0<MA_1)&&(MA_1>MA_2)) || ((Yellow_0-Red_0)>))(Yellow_1-Red_1)&& ((MB_0<MB_1)&&(MB_1>MB_2))))
while(true)
{
ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red);
if (ord_close = false)
{
Comment("BAYポジションのクローズに 失敗しました。エラー#",GetLastError());//エラーのメッセージ
break;
}
else
{
Ord=0;
break;
}.

}.

開封の理由かもしれません。

void CritOpen()
{
if (///開くための条件//)

while(true)
{
ticket=OrderSend(Symbol(),OP_BUY,0.)です。1,Ask,0,0,NULL,10011,0,clrNONE); //open order BAY, MAGIC 10011
if(ticket<=0)
{
Comment("ポジションBAY-10011のオープンにエラー#で失敗しました",GetLastError());

break;
}
else
{
Comment("BAY-10011ポジションはロット0でオープンしました。1,price", Ask);
Ord=(Ord+1);
。break;
}
}

 
rapid_minus:


抜粋


...

before ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red);

注文を選択するには、OrderSelect()関数を 使用するとよいでしょう。このようなclose関数のループの目的がわからないのですが...。

 
evillive:

before ord_close=OrderClose(OrderTicket(),0.1,MarketInfo(OrderSymbol(),MODE_BID),0,Red);

注文を選択するには、OrderSelect()関数を使用するとよいでしょう。

唯一持っている。実は、最初はそうだったんです。手探り状態で原因追求を開始した。ループの感覚がわからない。

ループで開いたのだから、閉じるのもループで......と、類推してごまかしているだけなのです。

 

イゴール・キムは私たちのお手本です。

void start() {
ManagePositions();
}.

//+-----------------------------------------------------------------------------
//| 市場価格でポジションを閉じる|
//| パラメータ。|
//| sym - 測定器名 ("" - 現在のシンボル)|
//| op - 操作(-1 - 任意の位置)|
//| mn - MagicNumber(-1 - 任意のマジックを)|
//+----------------------------------------------------------------------------+
void ClosePositions(string sym="", int op=-1, int mn=-1) {
int i, k=OrdersTotal().

if (sym=="") sym=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if (OrderSymbol()==sym && (op<0 || OrderType()==op)){
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY){
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
}
if (OrderType()==OP_SELL) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
}
}
}
}
}
}.

しかし、コンパイラはOrderCloseの戻り値をチェックすることを要求している

 
rapid_minus:

イゴール・キムは私たちのお手本です。


しかし、コンパイラはOrderCloseの戻り値のチェックを要求しています

では、例のように、まず選択し、次に閉じます。たった1つの注文でも、100万件の注文でも、まずそれぞれの注文が選ばれなければならないからだ。

チェックは非常に簡単です if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell))Print("Closing error #",GetLastError());

 
rapid_minus:

イゴール・キムは、私たちのものを例として挙げています。

...

しかし、コンパイラはOrderCloseの戻り値のチェックを要求しています

それは、イゴールが関数を書いた時代には、コンパイラは戻り値のチェックを要求しなかったが、今日のコンパイラは、そうしないと悪態をつくからである。
 
evillive:

そこで、例のように、まず選択し、次に閉じるようにします。注文が1件でも100万件でも、まず1件ずつ選択しなければならない。

チェックは非常に簡単です if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell))Print("Closing error #", GetLastError());

次のようにしました: if (!OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red)
{
Comment(" BAYポジションクロージャーは エラー#で失敗しました。",GetLastError());
break;
}
else
{
Ord=0;
break;
}.

戻り値を確認する必要がある」と要求され続ける。

このように作りました。

ord_close=OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);
if (ord_close = false)
。{
Comment("BAYポジションのクローズに失敗しエラー#",GetLastError()); //エラーメッセージ
break;
}
else
{
Ord=0;
break;
}.

サイレントしかし、いずれの場合も、ポジションを閉じることはできません

ZS: クローズ条件とオープン条件の定義に間違いがあるようです。

上記の投稿は、クローズ条件の一例です。そこで何が問題なのでしょうか?

 
rapid_minus:

無音である。しかし、いずれの場合も、ポジションを閉じることはできません

ZS: クローズポジションとオープンポジションの条件の定義に間違いがあるように思います。

上の投稿では、クローズドコンディションの例を挙げています。そこで何が問題なのでしょうか?

そうですね......エラーもなく黙々とやっても終わらないのであれば、終了条件がおかしいのでしょう。この条件そのものを考え直し、書き換える必要があるのです。

ここの括弧の配置がなぜか間違っている。

if (((Yellow_0-Red_0)<(Yellow_1-Red_1) && ((MA_0<MA_1)&&(MA_1>MA_2))) || ((Yellow_0-Red_0)>(Yellow_1-Red_1) && ((MB_0<MB_1)&&(MB_1>MB_2))))

これはどうでしょう?

if (((Yellow_0-Red_0<Yellow_1-Red_1) && (MA_0<MA_1 && MA_1>MA_2)) || ((Yellow_0-Red_0>Yellow_1-Red_1) && (MB_0<MB_1 && MB_1>MB_2)))