[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 768

 
FoxUA:


私はただ関数を呼び出すだけで、必要なのは1行の「もし注文が1つより多いなら・・・」だけです。ということで、全機能を提供することになりました。

以下は、私の注文データの保存方法です。


簡単なもので、図書館に置いておくのです。

カウントする注文の種類とそのマスタを入力すると、オープンまたはセットされた注文の数を返します。

int ChPos( int TypePos,int Magic) 
{
// возвращает кол-во позицй которые открыты или выставленн отложками с магиком  Magic 
   int i;
   int count=0 ;
   for( i=0; i < OrdersTotal(); i++)         
   {
      if(OrderSelect(i,SELECT_BY_POS)==true) 
       {                                   
           if(OrderType()==OP_BUY && TypePos==OP_BUY && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELL && TypePos==OP_SELL && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_BUYLIMIT && TypePos==OP_BUYLIMIT && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_BUYSTOP && TypePos==OP_BUYSTOP && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELLLIMIT && TypePos==OP_SELLLIMIT && Magic==OrderMagicNumber()){count++;}
           if(OrderType()==OP_SELLSTOP && TypePos==OP_SELLSTOP && Magic==OrderMagicNumber()){count++;}
       }
    }   
return(count);
}

次のような使い方ができます。

if ((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)

 
ivandurak:


図書館に置いておくと面倒なことはありません。

カウントする注文の種類とそのマスターを入力すると、未決済注文または設定された注文の数を返します。

これは、次のように使うことができます。

if ((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)

そんな機能があるのに必要ない、必要なのは
一行だけ「注文が複数ある場合は・・・。其れでこそ

あなたが示したのと同じ関数の私のデータは、ここに格納されています。

int total_order;            // переменная в которой хранится общее количество открытых ордеров в терминале
int my_total_order;         // переменная в которой хранится общее количество открытых ордеров с нашим Magic

と、こんな感じです。

void Myorders(){
      int cnt;
      total_order = OrdersTotal();
      my_total_order = 0;
      HaveBuyOrder          = false;
      HaveSellOrder         = false;
      HaveBuyStopOrder      = false;
      HaveSellStopOrder     = false;
      HaveBuyLimitOrder     = false;
      HaveSellLimitOrder    = false;
      HaveBuyLimitOrderEnd  = false;
      HaveSellLimitOrderEnd = false;      
      for(cnt = total_order - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Curr_symb && OrderMagicNumber() == Magic) {
         if (OrderType() == OP_BUY)       {HaveBuyOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELL)      {HaveSellOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYSTOP)   {HaveBuyStopOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLSTOP)  {HaveSellStopOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrderEnd = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrderEnd = true; my_total_order++;}
} } }
 

できたと思う。

static int aaa = OrdersHistoryTotal()+OrdersTotal( )

if (あなたの条件 && aaa < OrdersHistoryTotal() + OrdersTotal() )

{

事業者

aaa=OrdersHistoryTotal()+OrdersTotal()

}

そうであれば、やはりマジシャンを意識した機能に入れた方が良いのでは......。現在取り組んでいることを教えてください。ロジックがちょっとおかしいのですが、あと1つ注文を出すと、OpenPositionより大きくない注文を出しやすくなりませんか?

この関数は、未決済注文と保留注文の合計数を返します。 OP_BUY注文がいくつあるか、OP_BUYLIMIT OP_SELLLIMITがあればOP_SELLなどが表示されない。

 
ivandurak:

解ったのですが、今度はif関数の問題が解りません

if(bt==1&&bl==7) 
{OpenBuyStopOrder(Lot,PRBidS);
OpenBuyLimitOrder(Lot*3,PRAskL); 
  if (HaveBuyLimitOrderEnd== true) 
  {ModifyBuyStopOrder(PRAskS);  // Выбираем            
  } }          
  

は、最初の値が実行されることがポイントです。

これは、(HaveBuyLimitOrderEnd=true) の場合、動作しません。
{ModifyBuyStopOrder(PRAskS);//選択
} }

つまり、HaveBuyLimitOrderEndという注文があれば、それを価格変更で変更する PRAskS

上記のコードで、HaveBuyLimitOrderEndの値をvoid Myorders()から取得しています。

の値は、if(bt==1&&bl==7)がメインなので、これが真なら、以下の全てを使用します。


OrderLots()==3*Lot に設定したため、haveBuyLimitOrderEnd=true になっている可能性が高い。

 
void Myorders(){
      int cnt;
      total_order = OrdersTotal();
      my_total_order = 0;
      HaveBuyOrder          = false;
      HaveSellOrder         = false;
      HaveBuyStopOrder      = false;
      HaveSellStopOrder     = false;
      HaveBuyLimitOrder     = false;
      HaveSellLimitOrder    = false;
      HaveBuyLimitOrderEnd  = false;
      HaveSellLimitOrderEnd = false;      
      for(cnt = total_order - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Curr_symb && OrderMagicNumber() == Magic) {
         if (OrderType() == OP_BUY)       {HaveBuyOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELL)      {HaveSellOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYSTOP)   {HaveBuyStopOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLSTOP)  {HaveSellStopOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrder = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrder = true; my_total_order++;}
         if (OrderType() == OP_BUYLIMIT)  {HaveBuyLimitOrderEnd = true;  my_total_order++;}
         if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrderEnd = true; my_total_order++;}
} } }
赤色で表示されていることに注意してください。取引注文の種類は同じで、パイプの変数が異なるように設定されている、これはそれがどのようにあるべきかということです。
 
ivandurak:
赤色でハイライトされている部分に注目してください。取引注文の種類は同じで、パイプの変数が異なって設定されている、これはどのようにあるべきかということです。

はい、それは別の開口部の関数と私はOrderType()の要求をしないと、それが開いているかどうかフラグを要求したので、あるべきですが、問題は他の要求も、私は最初に投げたこの動作しないため、この関数ではありません、そして同じ関数に正常にオープンすること

ということは、オペレータのリクエストに問題があるのでは?

 

問題は別のところにあるようだ。でも、コードは見た方がいいでしょうね。

 
Vinin:

問題は別のところにあるようだ。でも、コードを見ないとわからないと思うんです。


確かに他の場所ではなく、他は全て動作します。問題はリクエスト(HaveBuyLimitOrderEnd==true)が間違っているので、他にどのように修正と削除を指示すれば良いのか悩んでいます。

またはクエリ自体が間違っている

if(bs==1&&bl==3)
{OpenBuyLimitOrderEnd(Lot*15,PRAskL)。

if (HaveBuyLimitOrderEnd== true)

{ModifyBuyStopOrder(PRAskS)です。
} }

 
FoxUA:

はい、それは別の開口部の関数と私はOrderType()の要求をしないと、それが開いているかどうかフラグを要求したので、あるべきですが、問題は他の要求も、私は最初に投げたこの動作しないため、この関数ではありません、そして同じ関数に正常にオープンすること

ということで、問題は演算子のクエリにあります。

if(bt==1&&bl==7) 
{OpenBuyStopOrder(Lot,PRBidS);
OpenBuyLimitOrder(Lot*3,PRAskL); 
  if (HaveBuyLimitOrderEnd== true) 
  {ModifyBuyStopOrder(PRAskS);  // Выбираем            
  } }         


赤印の関数でHaveBuyLimitOrderEndがパイプに設定されているかどうか。 もしそうでなければ、ifの前にMyorders()を呼び出す必要があります。そうでなければ、そこに何があるのかわからないのです。また、念のため、フラグ(変数)は

HaveBuyOrder = false。
HaveSellOrder = false。
HaveBuyStopOrder = falseとする。
HaveSellStopOrder = falseとする。
HaveBuyLimitOrder = falseとする。
HaveSellLimitOrder = falseとする。
HaveBuyLimitOrderEnd = falseとする。
HaveSellLimitOrderEnd = falseとする。
は、グローバルレベルで定義する必要があります。

 
ivandurak:


パイプの中でHaveBuyLimitOrderEndフラグが赤く設定されているかな。 そうでない場合は、ifの前にMyorders()を呼び出す必要がありますね。そうでないと、そこに何があるのかがわからない。また、念のため、フラグ(変数)を

HaveBuyOrder = false。
HaveSellOrder = false。
HaveBuyStopOrder = falseとする。
HaveSellStopOrder = falseとする。
HaveBuyLimitOrder = falseとする。
HaveSellLimitOrder = falseとする。
HaveBuyLimitOrderEnd = falseとする。
HaveSellLimitOrderEnd = falseとする。
はグローバルに定義する必要があります。

グラバルレベル


bool HaveBuyOrder; // 市場公開の買い注文があるかどうかのフラグ
bool HaveSellOrder; // 売り注文の保有フラグ
bool HaveBuyStopOrder; // 未決済の買い注文のフラグ
bool HaveSellStopOrder; // 未決済の売り注文がある場合のフラグ
bool HaveBuyLimitOrder; // 未決済の買い注文がある場合のフラグ
bool HaveSellLimitOrder; // 未決済の売り注文がある場合のフラグ
bool HaveBuyLimitOrderEnd; // 未決済の買い注文があるかどうかのフラグ
bool HaveSellLimitOrderEnd; // 保留中の売り注文を開くフラグ

オーダーオープン機能にあります。

ticket = OrderSend(Curr_symb,OP_BUYSTOP, Lot, PRAskS, Slippage, SL, TP, 0, Magic, 0,CLR_NONE);
if (ticket > 0) {
HaveBuyStopOrder = trueとする。

if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))Print("function to place BuyStop order : ", OrderOpenPrice())
}
else Print("Error # ", GetLastError(), " function for placing BuyStop order",MarketInfo(Curr_symb,MODE_ASK));
return(ticket)です。
}

というわけで、他はすべてうまくいく