[アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. - ページ 276

 
BBSL:

ティックのことなら、データファイルを保存するコードを書けばいいのですが、ekspertでファイルから読み込む必要があります。パソコンを起動し続けるだけでも意味があるのでしょうか?
2番目の選択肢を使うべきなんでしょうね。BBSL さん、ありがとうございました。
 
artmedia70:

あなたのやっていることはおかしい...。ポジションを開くとき、ある 変数にチケット番号を割り当てますが、別の 変数をチェックします...。

また、OrderSend()は 失敗した場合、-1(マイナス1)を返すので、0 以下が必要な場合は1 以下かどうかをチェックします。

まず目に飛び込んでくるのがこれ。でも、面白いものをたくさん持っていると思うのですが...。:)


おはははは、うん......楽しいね......。特にチェックを開始するとき))

さあ、もう一回...こんな感じです。

私は注文を開ける。

order_id = OrderSend(Symbol(),OP_SELL,1.0,Bid,3,0,0,"expert comment",255,0,Red);
   if(order_id<0)
     {
      error=GetLastError();
      Print("send_orders, error = ",ErrorDescription(error));
      return;
     }
     } 

クロージングオーダー

if(OrderSelect(0, SELECT_BY_POS)==true){

OrderClose(OrderTicket(),1,Bid,3,Red);

}

右、一回の注文で?)

 
hedger:
どうやら、2番目の選択肢を使うべきようです。BBSL さん、ありがとうございました。

どういたしまして、本当にお役に立てれば幸いです))
 
artmedia70:

あなたのやっていることはおかしい...。ポジションを開くとき、ある 変数にチケット番号を割り当てますが、別の 変数をチェックします...。

また、OrderSend()は 失敗した場合、-1(マイナス1)を返すので、0 以下が必要な場合は1 以下かどうかをチェックします。

まず目に飛び込んでくるのがこれ。でも、面白いものをたくさん持っていると思うのですが...。:)


なるほど、ティキットの番号はこうやって取得すればいいんですね。

nomer_ticketa = OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"expert comment",255,0,Green);
   if(ticket<1)
 
artmedia70:

あなたのやっていることはおかしい...。ポジションを開くとき、ある 変数にチケット番号を割り当てますが、別の 変数をチェックします......。

また、OrderSend()は 失敗した場合、-1(マイナス1)を返すので、0 以下が必要な場合は1 以下かどうかをチェックします。

まず目に飛び込んでくるのがこれ。でも、面白いものをたくさん持っていると思うのですが...。:)


リスペクト、ありがとうございます!))
 
BBSL:


わかります、こうやってティキットの番号を取得しないといけないんですね。

たった一度の注文で、うまくいくかもしれませんが、それでも手動で開いたら、同じようにはいきませんよね。チケット番号を変数に保存しておき、オーダー選択 後に保存されているチケットと比較する必要があります。

 if (OrderTicket()==number_ticket) {
   // ... код для работы с выбранным ордером при совпадении тикетов
   }

また、一般に、注文の選択は、ループ内のOrderSelect()関数を使用して行う必要があります。

for (i=0; i<OrdersTotal(); i++) {                    // цикл по всем рыночным ордерам терминала
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { // Если выбран любой рыночный ордер с индексом i
      if (OrderSymbol()!=Symbol())     continue;   // Если символ не текущего графика, переходим к выбору следующего ордера
      if (OrderMagicNumber()!=Magic)   continue;   // Если его магик не совпадает с магиком советника - переходим к выбору следующего
//... далее можно проверять другие параметры выбранного ордера, но в этом месте уже есть выбранный ордер текущего графика и номером магика советника
      if (OrderTicket()==number_ticket) {          // проверяем тикет выбранного ордера и, если есть совпадение, выполняем с ним дальнейшие действия
         // ... код, выполняющий дальнейшие действия с найденным нужным ордером ...
         }
      }
   else if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // Иначе, если не удалось выбрать ордер
      Print ("Ошибка при выборе ордера из списка рыночных ордеров = ", GetLastError());  // Выведем сообщение об ошибке и её номер в журнал.
   }

これはあくまで理解のための例であり、完成された動作コードではありません。:)

 
artmedia70:

注文が1つしかない場合はうまくいくかもしれませんが、それでも手動で開くとなると、同じようにはいきませんよね。チケット番号を変数に格納し、注文を選択した後、そのチケットと格納されているチケットを比較する必要があります。

また、一般的に注文の選択は、ループ内のOrderSelect()関数を使用する必要があります。

これはあくまで理解のための例であり、完全な動作コードではありません、どちらかというと...。:)




注文を閉じるとき、複数の注文がある場合は、このループを使用する必要があります。

int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) {
 //...
 
bolt:

注文を閉じるとき、複数の注文がある場合は、このようなサイクルを使用する必要があります。

私の投稿の最後の行を読んでください。誰が〆の例を書いたと言った?

あとは、明白な真実です。自分だけの教科書を書く。

 

OrderOpenPriceが機能しない理由を教えてください。タスクは、ある価格で出された注文をプールで検索し、なければ注文を入れ、それが設定されたフラグを立てることです。


for(int i=1 ; i <= OrdersTotal() ; i++)
   {
   if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES))
      {
      if(OrderOpenPrice() == price) 
        {
        orderset = true;
        }
      }
   }
     
if((orderset==false)
   {
   OrderSend(Symbol(),OP_SELLLIMIT,baselot,price,3,NULL,price-10,"Comment",0001+i,0,White); 
   }
 
Pyro:

OrderOpenPriceが機能しない理由を教えてください。タスクは、ある価格で出された注文をプールで検索し、なければ注文を入れ、それが設定されたフラグを立てることです。



実数を比較することはできない。