KimIVの便利な機能 - ページ 113

 
togomsk:


こんにちは!

ライブラリを接続すると、なぜかextern演算子が効かなくなる、つまり変数が定義され、すべて正常にコンパイルされ、原理的にはEAが動作するのですが、同時に、パラメータがかなり多いにもかかわらず、型起動時にパラメータがない状態になってしまいます。その理由は何でしょうか。


コード内を検索

#property library

そして削除。

 

この関数に、最後から2番目のトランザクションのための変数jを追加しました。

double GetProfitLastClosePos(string sy="", int op=-1, int mn=-1, int j=0) {。
datetime o;
double p=-1;
int i, k=OrdersHistoryTotal();

if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {.
if(OrderSelect(i-j, SELECT_BY_POS, MODE_HISTORY)){
if (OrderSymbol()==sy || sy=="") {.
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {。
if (op<0 || OrderType()==op) { }.
if (mn<0 || OrderMagicNumber()==mn) {.
if (o<OrderCloseTime()){
o=OrderCloseTime()。
p=OrderProfit()です。
}
}
}
}
}
}
}
return(p)です。
}
 
abdul1:

この関数にペナルトレード用の変数jを追加しています。

クローズされたオーダーは、クローズされた時間に従ってOrdersHistoryTotal()で右→左(最後のものが右)に考慮されると考えます。

double GetProfitLastClosePos (string sy="", int op=-1, int mn=-1,
                              int j=0)          // Искомый (по номеру) ордер от последнего закрытого 
{
    int k = OrdersHistoryTotal(), li_cnt = 0;
//----
    if (sy == "0" || sy == "") sy = Symbol();
    for (int i = k - 1; i >= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) continue;
        if (OrderSymbol() != sy) continue;
        if (OrderType() > 1) continue;
        if (op >= 0) if (OrderType() != op) continue;
        if (mn >= 0) if (OrderMagicNumber() != mn) continue;
        if (j == li_cnt) return (OrderProfit());
        li_cnt++;
    }
//----
    return (-1.0);
}

この関数は, シンボル, マジック, タイプによって「フィルタリング」された直近のクローズドオーダーの利益 j 番目を返す.また、数字は0番目から数えます。

 
TarasBY:

クローズしたオーダーはOrdersHistoryTotal()で右→左(最新の極右)とクローズした時間順にカウントされることを考慮すると、クローズしたオーダーはOrdersHistoryTotal()で右→左(最新の極右)とカウントされる。

この関数は、商品、Magik、タイプによって「フィルタリング」された、最後のクローズドオーダーの利益j番目のものを返します。また、数字は0番目から数えます。

それが必要なんだ!
 

皆さん、こんにちは。

同ロットの買い注文と売り注文を、利益が+になった時点でカウンターオーダーで決済する機能が必要です。この機能を実行しようとすると、4108エラーが出る(チケットが違う)

何が問題なのか、教えてください。

//+------------------------------------------------------------------+
int fCloseBu(){
        // Закрываем встречные
  double LotB,LotS,PrB=0,PrS=0;
  int TicketB,TicketS,i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==Symbol() || Symbol()=="")) {
        if (Magic_N<0 || OrderMagicNumber()==Magic_N) {
        //----------
        if(OrderType()==OP_BUY){
          if (PrB<OrderProfit()+OrderSwap()+OrderCommission()) {
            PrB=OrderProfit()+OrderSwap()+OrderCommission();
            LotB=OrderLots();
            TicketB=OrderTicket();
          }
        }
        if(OrderType()==OP_SELL){
          if (PrS<OrderProfit()+OrderSwap()+OrderCommission()) {
            PrS=OrderProfit()+OrderSwap()+OrderCommission();
            LotS=OrderLots();
            TicketS=OrderTicket();
          }
        }
       if (PrB>0 && PrS>0 && LotB==LotS) {
          OrderCloseBy(TicketB,TicketS,CLR_NONE);
          Print("Закрываем пару встречных ордеров c одинаковыми лотами в плюсе");
          }  
        }
      }
    }
  }
//-------------
   return(0);
}
//+------------------------------------------------------------------+
 
注文は、チェックの全サイクルが終了した時点で、つまりfor文の 内部ではなく、その後に終了させる必要があります。
 
移動平均 線をクロスさせるEAで、設定で移動平均線をずらすことができるものがあれば教えていただけないでしょうか。
 
Roger:
注文は、チェックの全サイクルが終了した時点で、つまりfor文の内部ではなく、その後に終了させる必要があります。


ありがとうございました。もし、このような機能を必要とする人がいれば、このような形になるでしょう。

//+------------------------------------------------------------------+
//|    Закрываем встречные                                           |
//+------------------------------------------------------------------+
int fCloseBu(){
  double LotB,LotS,PrB=0,PrS=0;
  int TicketB,TicketS,i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==Symbol() || Symbol()=="")) {
        if (Magic_N<0 || OrderMagicNumber()==Magic_N) {
        //----------
        if(OrderType()==OP_BUY){
          if (PrB<OrderProfit()+OrderSwap()+OrderCommission()) {
            PrB=OrderProfit()+OrderSwap()+OrderCommission();
            LotB=OrderLots();
            TicketB=OrderTicket();
          }
        }
        if(OrderType()==OP_SELL){
          if (PrS<OrderProfit()+OrderSwap()+OrderCommission()) {
            PrS=OrderProfit()+OrderSwap()+OrderCommission();
            LotS=OrderLots();
            TicketS=OrderTicket();
             }
           }
         }
       }
     }
   }//for
   if(PrB>0 && PrS>0 && LotB==LotS) {
     OrderCloseBy(TicketB,TicketS,CLR_NONE);
     Print("Закрываем пару встречных ордеров c одинаковыми лотами в плюсе");
  }
//-------------
   return(0);
}
//+------------------------------------------------------------------+
 
この言語に関するビデオチュートリアルはありますか?
 
Andrei5:
この言語に関するビデオチュートリアルはありますか?
本があります。 オンラインで読むことも、コンピューターにダウンロードすることもできます。上記→「チュートリアル」をご覧ください。