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

 
MisterD:
また、次のコードのどこに間違いがあるか教えてください。
deinit "の瞬間にループを呼び出す。
最後の注文以外は削除されます。
この行が一番エラーになりやすいと思います >>for (int i=1; i<=OrdersTotal(); i++) <<
しかし、論理的にはすべて正しいように思えるのですが......何か見落としているのでしょうか?

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


ループを逆から行う

//-------------------------------------------------------------------------------------------
for (int i=OrdersTotal()-1; i>=0; i--)
{
   if (OrderSelect(i,SELECT_BY_POS)==true)
   {
      int Type=OrderType();
      if (OrderSymbol()!= Symbol() || Type <2)continue;
      int Ticket=OrderTicket();
      bool Modify =OrderDelete(Ticket);
      if (Modify == true) Alert ("Ордер Удалён");continue;
      if (Modify != true) Alert ("Удаление ордера не удалась");
   }
} 
//-------------------------------------------------------------------------------------------
 
MisterD:
また、次のコードのどこに間違いがあるか教えてください。
deinit "の瞬間にループを呼び出す。
最後の注文以外は削除されます。
この行が一番エラーになりやすいと思います >>for (int i=1; i<=OrdersTotal(); i++) <<
しかし、論理的にはすべて正しいように思えるのですが......何か見落としているのでしょうか?

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

//-------------------------------------------------------------------------------------------
for (int i=1; i<=OrdersTotal(); i++)
{
if (OrderSelect(i-1,SELECT_BY_POS)==true)
{
int Type=OrderType()。
if (OrderSymbol()!= Symbol() || Type <2)continue;
int Ticket=OrderTicket();
bool Modify =OrderDelete(Ticket)。
if (Modify == true) Alert ("Order Deleted"); continue;
if (Modify != true) Alert ("Order deleted failed");
を続ける。
}
}
//-------------------------------------------------------------------------------------------


こんな風に試してみてください。

for(int i=OrdersTotal()-1;i>=0;i--) {
  if(OrderSelect(i,......................
 

こんにちは。少し手助けが必要です。利益の面で最も太いロットの1つを閉じる機能があります。

ループさせる必要がある

この機能の使い方を教えてください。例えば、私の口座の資本が5ピップス以上であれば、この機能は機能するはずです。

void ClosePosWithMaxProfitInCurrency(string sy="", int op=-1, int mn=-1) {
  double pr=0;
  int    i, k=OrdersTotal(), np=-1;

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (pr<OrderProfit()+OrderSwap()) {
            pr=OrderProfit()+OrderSwap();
            np=i;
          }
        }
      }
    }
  }
  if (np>=0) {
    if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
      ClosePosBySelect();
    }
  } 

}

 
sannin:

こんにちは。少し手助けが必要です。利益の面で最も太いロットの1つを閉じる機能があります。

ループさせる必要がある

例えば、私の口座の資本が5pips以上であれば、この機能は機能するはずです。

例えば、口座の自己資本が5pips(4文字分)より大きい場合、実際の市場では、注文数が 3~4より多い場合、簡単にマイナスになります(削除の結果によるものです)。:)))

P.S. 私の見るところ、あなたは既製のコードを必要とし、そのような問題を解くためのアルゴリズムはあなたにとって無用の長物です

 
TarasBY:
5 pips (for 4 signs) - 実際の市場では、注文の数が3-4より大きい場合、(除去の結果によって)マイナスに回すことは容易である。:)))


私は一人...最近ゴールドに注目しているのですが...思ったより反応が早いです

私はまだこのような機能を扱ったことがありません・・・だからサポートをお願いしているのです

 
こんにちは、私はエキスパートアドバイザーの開発に 問題がある、それはインジケータで閉じるために規定された条件が、注文を閉じない、それは事前に感謝し、何を説明してください
ファイル:
 
sannin:


さて、私ですが...最近ゴールドに注目しているのですが...思ったよりスピードがありません

このフォームの機能をまだ使いこなせていないので・・・以下、サポートのお願いです。

まず、商品の集合ポジションのBUラインを計算します(pips単位で採算が取れるようになったら、注文を決済する条件を決めるために使用します)。

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Определение Уровня БезУбытка по символу                                    |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fGet_BreakEven (string fs_Symbol,     // Symbol
                       double fd_DeltaLots,  // разность объемов ордеров Buy и Sell
                       double fd_Profit)     // текущий профит по открытым ордера
{
    if (fd_DeltaLots == 0.) return (0.);
    double ld_BU = 0., ld_tickvalue = MarketInfo (fs_Symbol, MODE_TICKVALUE);   // цена одного пункта
//----
    //---- Уровень общего безубытка для открытых ордеров
    if (fd_DeltaLots > 0.) ld_BU = MarketInfo (fs_Symbol, MODE_BID) - (fd_Profit / (ld_tickvalue * fd_DeltaLots)) * MarketInfo (fs_Symbol, MODE_POINT);
    else if (fd_DeltaLots < 0.) ld_BU = MarketInfo (fs_Symbol, MODE_ASK) - (fd_Profit / (ld_tickvalue * fd_DeltaLots)) * MarketInfo (fs_Symbol, MODE_POINT);
//----
    return (ld_BU);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

そして、現在の価格とブレイクイーブンラインの差を計算し、「差」が満足できるものであれば、注文を削除する手続きに進みます。まず、最も利益率の高い/損失の大きい注文のTicketを見つけることです。

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//         Получаем Тикет самого прибыльного/убыточного ордера                        |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fGet_TicketWithControlProfit (string fs_Symbol = "",  // Инструмент
                                  int fi_Magic = -1,      // Magic
                                  int fi_Type = -1,       // OrderType
                                  int fi_TypeProfit = 0)  // Профитность ордера среди остальных ордеров:
                                                          // >= 0 -  с самым большим профитом;
                                                          // < 0 - самый убыточный
{
    double ld_Profit = 0., ld_curProfit;
    int    li_Total = OrdersTotal(), li_Ticket = -1;
//----
    if (fs_Symbol == "") fs_Symbol = Symbol();
    if (fi_TypeProfit < 0) ld_Profit = 10000000000.;
    for (int i = li_Total - 1; i >= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue;
        if (OrderSymbol() != fs_Symbol) continue;
        if (fi_Magic > -1) if (OrderMagicNumber() != fi_Magic) continue;
        if (fi_Type > -1) if (OrderType() != fi_Type) continue;
        if (fi_Type > 1) continue;
        ld_curProfit = OrderProfit() + OrderSwap() + OrderCommission();
        if (fi_TypeProfit >= 0) {if (ld_Profit <= ld_curProfit) continue;}
        else if (ld_Profit >= ld_curProfit) continue;
        ld_Profit = ld_curProfit;
        li_Ticket = OrderTicket();
    }
//----
    return (li_Ticket);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

削除はどちらか一方でも可能です。削除させてください。

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Функция закрытия "своих" ордеров по признаку                               |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fClose_AllOrdersByProfit (string fs_Symbol = "",  // Инструмент
                              int fi_Magic = -1,      // Magic
                              int fi_Type = -1,       // OrderType
                              int fi_TypeProfit = 0)  // Направление закрытия ордеро по профитности:
                                                      // >= 0 - начиная от самого большого профита;
                                                      // < 0 - начиная от самого маленького профита;
{
    int li_Ticket = fGet_TicketWithControlProfit (fs_Symbol, fi_Magic, fi_Type, fi_TypeProfit),
        li_cnt = 0;
//----
    while (li_Ticket > 0)
    {
         //---- Здесь вставите свою процедуру закрытия 
         //---- что-то типа:
         //ClosePosByTicket (li_Ticket);
         li_Ticket = fGet_TicketWithControlProfit (fs_Symbol, fi_Magic, fi_Type, fi_TypeProfit);
         li_cnt++;
    }
//----
    return (li_cnt);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

さらに正しいユニットを組み立てるのは、それほど難しいことではありません。それをやるか、仕事に 行くしかないでしょう......。:)

 
変数に価格値を代入したい。

a=(NormalizeDouble(OrderOpenPrice(),5));


しかし、なぜか1.3360と4桁の値で描画される

間違いを教えてください。
 
lottamer:
変数に価格値を代入したい。



しかし、なぜか1.3360と4桁の値で描画される

エラーを教えて ください。

もしかしてDCは4桁?または、DoubleToStr(YourPrice,5)を使用せずに価格を出力する。
 
Sepulca:

もしかしてDCは4桁?または、DoubleToStr(YourPrice,5)を使用せずに価格を表示する。


DCは5桁...

WITHOUT DoubleToStr(YourPrice,5) とはどういう意味ですか? DoubleToStr(YourPrice,5) がどこにもないのですが。