反対注文を開く

 

皆さん、こんにちは。

この問題を解決するために、皆さんの助けを借りたいのです。

注文が開始され、価格が注文開始価格より 低い場合、反対注文を開きたいのです。

この場合、私はこのコードを使用しようとしていますが、成功しません。どなたか助けていただけませんか?

ありがとうございました。

ルイス

double OpenOppositeOrder() 
 {
  int Op;  
 // for(int Counter=0;Counter<=OrdersTotal()-1;Counter++)
  for(int Counter=OrdersTotal()-1;Counter>=0;Counter--)
  {
   OrderSelect(Counter,SELECT_BY_POS,MODE_TRADES);
   {
    if(OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber)
    {
     Op=OrderType();
     if(Op==OP_BUY && NormalizeDouble(Bid,Digits)*UsePoint<OpenPrice)
     {      
     SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,NormalizeDouble(Bid,Digits),UseSlippage,0,0,"Sell Order",MagicNumber,0,Red);
     if(SellTicket>0)AddLimitsSell();
      }
     if(Op==OP_SELL && NormalizeDouble(Ask,Digits)*UsePoint>OpenPrice)
     {      
     BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,NormalizeDouble(Ask,Digits),UseSlippage,0,0,"Buy Order",MagicNumber,0,Green);
     if(BuyTicket>0)AddLimitsBuy();
      }
     }
    }
   }
  }
 
luisneves:

皆さん、こんにちは。

この問題を解決するために、皆さんの助けを借りたいのです。

注文が開始され、価格が注文開始価格より低い場合、反対注文を開きたいのです。

この場合、私はこのコードを使用しようとしていますが、成功しません。どなたか助けていただけませんか?

ありがとうございました。

ルイス

この質問に答えることができます、それはあなたに多くのことを助けるでしょう。

1.OrderSelect() の戻り値は何ですか - OrderSelect のドキュメントを読むと、この質問に答えるのに役立ちます。

2.どのようなエラーは、注文を送信するために失敗したとき?

 
luisneves:

皆さん、こんにちは。

この問題を解決するために、皆さんの助けを借りたいのです。

注文が開始され、価格が注文開始価格より低い場合、反対注文を開きたいのです。

この場合、私はこのコードを使用しようとしていますが、成功しません。どなたか助けていただけませんか?

UsePoint という変数の目的は何ですか? それを使用している理由を説明できれば、おそらくあなたの問題が何であるかを理解できると思います。


OrderSend() がうまくいくかどうか、失敗するかどうか、その理由は何か、失敗したときに関連する変数が何であったかを知りたいのではないですか?

これを読んでください:関数の戻り値とは 何ですか?どのように使用するのですか?

 

RaptorUKさん、こんにちは。

早速のご回答ありがとうございます。

UsePointは 小数点以下5桁を調整するため、Point*10となります。

OpenPriceは OrderOpenPrice()です。

ありがとうございました。

ルイス

 
luisneves:

RaptorUKさん、こんにちは。

早速のご回答ありがとうございます。

UsePointは 小数点以下5桁を調整するものなので、Point*10となります。

なぜこのような状況で使用するのか、説明していただけますか?

 

RaptorUKさん、こんにちは。

おっしゃるとおりです。TakeProfitとStoplossに使うだけでいいんですね(確か・・・)。

 
luisneves:

RaptorUKさん、こんにちは。

おっしゃるとおりです。TakeProfitとStoplossに使うだけでいいんですね(確か・・・)。

答えてくれて、考えてくれて、ありがとうございます :-)
 

こんにちは、RaptorUKです。

私はあなたが提供したリンクを見て、コード上のエラールーチンを入れて、ちょうど返されたエラーは言う 2012.11.06 06:40 market order ecn v1 EURUSDi,M5: Order Send failed, error # 4051.私はあなたが提供したリンクを見ることができます。

その後、コード上で私はOrderSelectと使用チケットにいくつかの変更を加えましたが、物事はまだ動作していません。また、私は意味のための検索を行い、私が見つけたものはERR_INVALID_FUNCTION_PARAMVALUE(4051)であり、残念ながら私は ここから取得する方法を知りません。

ここからどうしたらいいのかがわかりません・・・。

double OpenOppositeOrder() 
 {
  int Op;  
 // for(int Counter=0;Counter<=OrdersTotal()-1;Counter++)
  for(int Counter=OrdersTotal()-1;Counter>=0;Counter--)
  {
   //OrderSelect(Counter,SELECT_BY_POS,MODE_TRADES);
   OrderSelect(Ticket,SELECT_BY_TICKET);
   {
    if(OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber)
    {
     Op=OrderType();
     if(Op==OP_BUY && NormalizeDouble(Bid,Digits)<OpenPrice)
     {      
     Ticket = OrderSend(Symbol(),OP_SELL,LotSize,NormalizeDouble(Bid,Digits),UseSlippage,0,0,"Sell Order",MagicNumber,0,Red);
     if(Ticket>0)AddLimitsSell();
      } 
      if( Ticket > 0 )
   {
   Print("Order placed # ", Ticket);
   }
else
   {
   Print("Order Send failed, error # ", GetLastError() );
   }
     if(Op==OP_SELL && NormalizeDouble(Ask,Digits)>OpenPrice)
     {      
     Ticket = OrderSend(Symbol(),OP_BUY,LotSize,NormalizeDouble(Ask,Digits),UseSlippage,0,0,"Buy Order",MagicNumber,0,Green);
     if(Ticket>0)AddLimitsBuy();
      }
      if( Ticket > 0 )
   {
   Print("Order placed # ", Ticket);
   }
else
   {
   Print("Order Send failed, error # ", GetLastError() );
   }
      
      
     }
    }
   }
  }


 
luisneves:

こんにちは、RaptorUKです。

私はあなたが提供したリンクを見て、コード上のエラールーチンを入れて、ちょうど返されたエラーは言う 2012.11.06 06:40 market order ecn v1 EURUSDi,M5: Order Send failed, error # 4051.私はあなたが提供したリンクを見ることができます。

その後、コード上で私はOrderSelectと使用チケットにいくつかの変更を加えましたが、物事はまだ動作していません。また、私は意味のための検索を行い、私が見つけたものはERR_INVALID_FUNCTION_PARAMVALUE(4051)であり、残念ながら私は ここから取得する方法を知りません。

ここからどうしたらいいのかがわかりません・・・。

OrderSend()関数に 送信している値をチェックする必要があります ... それらは正しいタイプですか? 例えば、UseSlippageint でなければならず、bool のように聞こえます... LotSizedouble ですか? 正しい範囲にありますか? Min Lot より大きく Max Lot より小さい、Lot Step の倍数の値ですか?
 
RaptorUK:
OrderSend() 関数に送信する値を確認する必要があります。 正しい型ですか? 例えば、UseSlippageint でなければならず、bool のように聞こえます。


こんにちは、RaptorUKです。

お忙しいところすみません、たぶん、そろそろ飽きてくると思います。というわけで、Slippageはint、LotSizeはdoubleです。

私はまだ一生懸命理解しようとしているのですが、どうやら私の無知が祟っているようです(...)

何度かTesterの問題かと思い、Demoで試してみました。そして、ここでは価格がOrderOpenPriceの下(買いの場合)に来ると反対の注文を開始させることができないのです。

どうか、添付されているコードを見ていただけますか?

私はあなたが私のためにコードを書くことはありません、しかし、ちょうど少し助けをしたい。

提供される任意のヘルプのために事前に感謝し、同様にあなたの忍耐をfo

ルイス

ファイル:
 
luisneves:


こんにちは、RaptorUKです。

お忙しいところすみません、たぶん、そろそろ飽きてくると思います。というわけで、Slippageはint、LotSizeはdoubleです。

私はまだ一生懸命理解しようとしているのですが、どうやら私の無知が祟っているようです(...)

何度かTesterの問題かと思い、Demoで試してみました。そして、ここでは価格がOrderOpenPriceの下(買いの場合)に来ると反対の注文を開始させることができないのです。

どうか、添付されているコードを見ていただけますか?

私はあなたが私のためにコードを書くことはありません、しかし、ちょうど少し助けをしたい。

私はあなたが私のためにコードを書くことを望んでいるわけではありません。

なぜ、正しいコードを間違ったコードに変更したのですか?

あなたのループは、取引プール内のすべての注文(未決済および保留中の注文)を介してループしていた。ループの最初のパスでチケットはどこから来るのでしょうか?

 for(int Counter=OrdersTotal()-1; Counter>=0; Counter--)
  {
   //OrderSelect(Counter,SELECT_BY_POS,MODE_TRADES);
   OrderSelect( Ticket,  SELECT_BY_TICKET);


もう一つ質問です。このFunctionは何も返さないのに、なぜdouble 型なのでしょうか?

理由: