KimIV的有用功能 - 页 113

 
togomsk:


嗨!

由于某些原因,当你的库被连接时,extern操作符停止工作,即变量被定义,一切编译正常,原则上,EA工作,但同时,EA在启动类型时没有任何参数,尽管有相当多的参数。这方面的原因可能是什么?


在代码中找到

#property library

并删除。

 

我在这个函数中加入了一个变量j,用于倒数第二笔交易。

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

如果(sy=="0")sy=符号()。
for (i=0; i<k; i++) {
如果(OrderSelect(i-j, SELECT_BY_POS, MODE_HISTORY){
如果(OrderSymbol()==sy || sy==""){
如果(OrderType()==OP_BUY || OrderType()==OP_SELL) {
如果(op<0 || OrderType()==op){
如果(mn<0 || OrderMagicNumber()==mn) {
如果(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个利润,通过符号、Magik、类型进行 "过滤"。而数字则是从第0个开始计算的。

 
TarasBY:

如果我们考虑到已关闭的订单在OrdersHistoryTotal()中是按关闭时间从右到左(最新的最右)计算的。

该函数返回最后一个平仓订单的第j个利润,通过仪器、Magik、类型进行 "过滤"。而数字则是从第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:
是否有任何关于这种语言的视频教程?
有一本书,你可以在线阅读或下载到你的电脑。看上面->"教程"。