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

 
FUK!ごめんなさい!
T.P.が設定する場合、固有のオーダーナンバーはどのように管理するのですか?どのように変えるのですか?
 
Link_x:

私の例では、ランダムな注文番号、ボリューム-5、終値で、スリッページ0、矢印なし。 資料例:order_idで注文番号、出来高1、終値で計算、スリッページ3、矢印は赤色です。


賢いんだけど、1つだけ、See highlightedで、Symbol() を書いているんだよね。

そして、そのコード、「どうやって?」は、簡単です。

for(int i=OrdersTotal()-1;i>=0;i--)  //
    {
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
       {
     if(OrderType()==OP_BUY) price=Bid;
     else                    price=Ask;
     OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
       }
    }    
こんな感じ
 
r772ra:
なんとなく

うわっ!今度はポジションを閉じるが 即座に。やってみよう!
if(AccountProfit() > 50)
{
for(int i=OrdersTotal()-1;i>=0;i--) 
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderType()==OP_BUY) price=Bid;
else                    price=Ask;
OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
}
}   
}

そして、50ドルの潜在的な利益ですべてのポジションをクローズするコードを取得します。
ありがとうございました。
これですべてがクリアになった!
カッコイイ!:)
 
皆さん、こんにちは! 賢い人たち、助けてください。私はProfit=10 pipsに設定しています(つまり、2つのペアの合計利益が10 pipsに等しくなったら)両方のオープンディールがクローズされるはずです。しかし、私のトレードはクローズされません。どこにエラーがあるのか?
extern double lotAU=0.01;
extern double lotEA=0.01;
extern double Profit=10;
extern string Сomment           = "KVAZ_EURAUD_AUDUSD";
extern int Magic                = 1111;

int EASell, EABuy, AUSell, AUBuy;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
double prof;
double bidEA = MarketInfo("EURAUD",MODE_BID);
double askEA = MarketInfo("EURAUD",MODE_ASK);
double bidAU = MarketInfo("AUDUSD",MODE_BID);
double askAU = MarketInfo("AUDUSD",MODE_ASK);

string symEA = "EURAUD";
string symAU = "AUDUSD";

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
 }
}

double LineEA = iCustom (Symbol(), 0, "Ind_2 Line+1", 0, 1); // Первый инструмент
double LineAU = iCustom (Symbol(), 0, "Ind_2 Line+1", 1, 1); // Второй инструмент

if(NumberOfPositions("EURAUD")==0 && LineEA > 0.1 && LineAU < -0.1)
    {
       EASell = OrderSend(symEA,OP_SELL,lotEA,bidEA,3,0,0,"KVAZ_EURAUD_AUDUSD",Magic,0,Red);
    }
if(NumberOfPositions("AUDUSD")==0 && LineEA > 0.1 && LineAU < -0.1)
    {
       AUSell = OrderSend(symAU,OP_SELL,lotAU,bidAU,3,0,0,"KVAZ_EURAUD_AUDUSD",Magic,0,Red);
    }
if(NumberOfPositions("EURAUD")==0 && LineEA < -0.1 && LineAU > 0.1)
    {
       EABuy = OrderSend(symEA,OP_BUY,lotEA,bidEA,3,0,0,"KVAZ_EURAUD_AUDUSD",Magic,0,Red);
    }
if(NumberOfPositions("AUDUSD")==0 && LineEA < -0.1 && LineAU > 0.1)
    {
       AUBuy = OrderSend(symAU,OP_BUY,lotAU,bidAU,3,0,0,"KVAZ_EURAUD_AUDUSD",Magic,0,Red);
    }
    
  return(0);
  }
//+------------------------------------------------------------------+

int NumberOfPositions(string sy="", int op=-1, int mn=1111) {      //|  Параметры:                                                                |
                                                                  //|    sy - наименование инструмента   (""   - любой символ,                   |
                                                                  //|                                     NULL - текущий символ)                 |
                                                                  //|    op - операция                   (-1   - любая позиция)                  |
                                                                  //|    mn - MagicNumber                (-1   - любой магик)                    
  int i, k=OrdersTotal(), kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }
        }
      }
    }
  }
  return(kp);
}

私がクローズするとき、EAはシンボルとクローズする必要があるメイギク上の注文を見ないだけだと理解していることに注意してください。そして、それだけ.........。

そうそう、これの変形版もありましたね。1つの注文のみ決済され、10pipsの利益条件は満たされていない。要するに、でたらめだったのだ。

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  {
  if(OrderSymbol()!= Symbol()  || OrderMagicNumber()!=Magic) continue;
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
  }
 }
}


 
こんにちは、ある条件に達すると現在のバーと現在の価格でチャートに矢印が表示され、メッセージを与えるアラートが一度だけトリガーされる方法を教えてください。例:移動目標が「買い」のメッセージを持つ下向き矢印と「売り」のメッセージを持つ上向き矢印をそれぞれ横切った場合。ありがとうございました。
 
alexey1979621:
皆さん、こんにちは! 賢い人たち、助けてください。私はProfit=10 pipsに設定しています(つまり、2つのペアの合計利益が10 pipsに等しくなったら)両方のオープンディールがクローズされるはずです。しかし、私のトレードはクローズされません。どこにエラーがあるのか?

私がクローズするとき、EAはシンボルとクローズする必要があるメイギク上の注文を見ないだけだと理解していることに注意してください。そして、それだけ.........。

そう、もうひとつバリエーションがあったのです。10ポイントの利益という条件を満たさないまま、1ポジションだけ決済してしまった。とにかく、でたらめだった。


1.ポジションを建てた商品のアスクまたはビッドを使用して、ポジションを閉じる必要があります。

OrderClosePrice()で行うようなものではありません。

こう書け

if(prof>=Profit)
   {
  for(int i=OrdersTotal()-1;i>=0;i--) 
      {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
     double AS=MarketInfo(OrderSymbol(), MODE_ASK);
     double BI=MarketInfo(OrderSymbol(), MODE_BID);

       if(OrderType()==OP_BUY) price=BI;
       else                    price=AS;

       OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
         }
      }   
   }
こんな感じ
 
ストップがかかる可能性があり、その場合はフラグを元の状態に戻す必要があります。この問題は、チャートからEAを削除 することで解決するのでしょうか?
 
r772ra:

1.ポジションを建てた商品のAscまたはBidを使用してポジションを閉じます。

OrderClosePrice()で行うようなものではありません。

こう書け

このようなもの

完了しましたが、上記のフクロウに適用した場合の問題は解決していません。クローズ時に、EAがシンボルとクローズに必要なメジャーの注文を見てないだけだと思うのですが。
 
alexey1979621:
皆さん、こんにちは! 賢い人たち、助けてください。私はProfit=10 pipsに設定しています(つまり、2つのペアの合計利益が10 pipsに等しくなったら)両方のオープンディールがクローズされるはずです。しかし、私のトレードはクローズされません。どこにエラーがあるのか?

私がクローズするとき、EAはシンボルとクローズする必要があるメイギク上の注文を見ないだけだと理解していることに注意してください。そして、それだけ.........。

そうそう、こんなオプションもありましたね。取引は1回しか成立しておらず、10pipsの利益という条件も守られていない。要するに、でたらめだったのだ。

エラーにエラーを重ねる。もしかしたら、これで何かうまくいくかもしれない。

extern double lotAU=0.01;
extern double lotEA=0.01;
extern double Profit=10;
extern string EXP_Comment           = "KVAZ_EURAUD_AUDUSD";
extern int Magic                = 1111;

int EASell, EABuy, AUSell, AUBuy;
string gsa_SMB[2];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  gsa_SMB[0] = "EURAUD";
  gsa_SMB[1] = "AUDUSD";
   return (0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
    int    li_N;
    double prof = 0., ld_Price = 0.;

    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        OrderSelect (i,SELECT_BY_POS);
        li_N = fGet_NumSymbol (OrderSymbol(), gsa_SMB);
        if (li_N < 0) continue;
        if (OrderMagicNumber() != Magic) continue;
        prof += OrderProfit();
        Print ("Profit=", prof);
    }
    if (prof>=Profit)
    {
        for (i=OrdersTotal()-1; i>=0; i--)
        {
            OrderSelect (i, SELECT_BY_POS);
            li_N = fGet_NumSymbol (OrderSymbol(), gsa_SMB);
            if (li_N < 0) continue;
            if (OrderMagicNumber() != Magic) continue;
            if (OrderType() == OP_BUY) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_BID);
            else if (OrderType() == OP_SELL) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_ASK);
            OrderClose (OrderTicket(), OrderLots(), ld_Price, 5);
        }
    }
    double bidEA = MarketInfo ("EURAUD", MODE_BID),
           askEA = MarketInfo ("EURAUD", MODE_ASK),
           bidAU = MarketInfo ("AUDUSD", MODE_BID),
           askAU = MarketInfo ("AUDUSD", MODE_ASK),
           LineEA = iCustom (Symbol(), 0, "Ind_2 Line+1", 0, 1), // Первый инструмент
           LineAU = iCustom (Symbol(), 0, "Ind_2 Line+1", 1, 1); // Второй инструмент

    if (NumberOfPositions (gsa_SMB[0], -1, Magic) == 0)
    {
        if (LineEA > 0.1) if (LineAU < -0.1)
        {EASell = OrderSend (gsa_SMB[0], OP_SELL, lotEA, bidEA, 3, 0, 0, EXP_Comment, Magic, 0, Red);}
        if (LineEA < -0.1) if (LineAU > 0.1)
        {EABuy = OrderSend (gsa_SMB[0], OP_BUY, lotEA, askEA, 3, 0, 0, EXP_Comment, Magic, 0, Blue);}
    }
    if (NumberOfPositions (gsa_SMB[1], -1, Magic) == 0)
    {
        if (LineEA < -0.1) if (LineAU > 0.1)
        {AUBuy = OrderSend (gsa_SMB[1], OP_BUY, lotAU, askAU, 3, 0, 0, EXP_Comment, Magic, 0, Blue);}
        if (LineEA > 0.1) if (LineAU < -0.1)
        {AUSell = OrderSend (gsa_SMB[1], OP_SELL, lotAU, bidAU, 3, 0, 0, EXP_Comment, Magic, 0, Red);}
    }
    return (0);
}
//+------------------------------------------------------------------+
int fGet_NumSymbol (string fs_Symbol, string ar_SMB[])
{
    for (int li_IND = 0; li_IND < 2; li_IND++)
    {if (fs_Symbol == ar_SMB[li_IND]) return (li_IND);}
    return (-1);
}
//+------------------------------------------------------------------+

???

 
alexey1979621:
できたが、上のフクロウの問題は解決していない。クローズ時に、EAがシンボルとクローズに必要なメジャーの注文を見てないだけだと思うのですが。


シンボルもマジコンも表示されないはずですが、EAがすべて正しいのでしょうか?ログを見て、どのようなエラーが出るかを確認します。