Características úteis da KimIV - página 113

 
togomsk:


Olá!

Por alguma razão, quando sua biblioteca está conectada, o operador externo deixa de funcionar, ou seja, as variáveis são definidas, tudo se compila normalmente e, em princípio, a EA funciona, mas ao mesmo tempo, a EA não tem parâmetros ao iniciar o tipo, mesmo que haja muitos parâmetros. Qual pode ser a razão para isso?


Encontrar no código

#property library

E excluir.

 

Adicionei uma variável j a esta função, para a penúltima transação.

double GetProfitLastClosePos(string sy="", int op=-1, int mn=-1, int j=0) {
data/hora o;
duplo p=-1;
int i, k=OrdersHistoryTotal();

se (sy=="0") sy=Símbolo();
para (i=0; i<k; i++) {
se(OrderSelect(i-j, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy ||| sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
se (op<0 || OrderType()==op) {
se (mn<0 || OrderMagicNumber()==mn) {
se (o<OrderCloseTime()) {
o=OrderCloseTime();
p=OrderProfit();
}
}
}
}
}
}
}
retorno(p);
}
 
abdul1:

Acrescentei uma variável j a esta função para os penúltimos ofícios.

Se considerarmos que as ordens que foram fechadas são consideradas em OrdersHistoryTotal() de acordo com a hora de fechamento da direita -> esquerda (a última para a direita):

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);
}

A função retorna o lucro j-ésimo da última ordem fechada, "filtrado" por símbolo, magik, tipo. E os números são contados a partir do 0º.

 
TarasBY:

Se levarmos em conta que as ordens fechadas são contadas em OrdersHistoryTotal() pelo tempo de fechamento da direita -> esquerda (a última extrema direita):

A função retorna o lucro j-ésimo da última ordem fechada, "filtrado" por instrumento, Magik, tipo. E os números são contados a partir do 0º.

Isso é o que eu preciso!
 

Olá a todos.

Precisava de uma função para fechar ordens de Compra e Venda de lotes iguais por contra-ordens, quando seu lucro vai para +. Eu tentei fazer esta função, mas saiu um erro 4108 (bilhetes errados)

Você pode me dizer qual é o problema?

//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
 
As ordens devem ser fechadas quando todo o ciclo de verificações é feito, isto é, após a declaração, e não dentro.
 
Você pode me informar onde posso encontrar uma EA que trabalha no cruzamento de uma média móvel com a capacidade de mudar a média móvel nos ajustes?
 
Roger:
As ordens devem ser fechadas quando todo o ciclo de verificações é feito, isto é, após a declaração, e não dentro.


Obrigado! Se alguém mais precisar de tal função, ela será assim:

//+------------------------------------------------------------------+
//|    Закрываем встречные                                           |
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
 
Há alguns tutoriais em vídeo sobre este idioma?
 
Andrei5:
Há alguns tutoriais em vídeo sobre este idioma?
Há um livro. Você pode lê-lo online ou baixá-lo para o seu computador. Veja acima -> "Tutorial".
Razão: