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

 

Boa tarde.

Modifiquei a função GetProfitOpenPosInCurrency() para devolver a pior posição perdida. Você pode dizer a quais funções seriam adequadas para retornar o tempo de abertura desta posição (OrderOpenTime())?

double GetMaxLoseOpenPosInCurrency(string sy="", int op=-1, int mn=-1) {
  double p=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) 
            if(p > OrderProfit() + OrderSwap() + OrderCommission()){
            p=OrderProfit()+OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(p);
}
 
abeiks:

Boa tarde.

Modifiquei a função GetProfitOpenPosInCurrency() para devolver a pior posição perdida. Você pode dizer a quais funções seriam adequadas para retornar o tempo de abertura desta posição (OrderOpenTime())?


Devolver o número do bilhete e você pode fazer com as funções padrão
 
Vinin:

Devolver o número do bilhete e você pode dispensar as funções padrão

Obrigado.
 

KimIV , olá. Procurando - não consigo encontrar o roteiro - apague todas as ordens pendentes no símbolo - e arrasteno símbolo, talvez haja --post........ não o considere impertinente.

 

Boa tarde.

Estou usando a função isTradeTimeInt() da KimIV. Vou usar muitos intervalos de tempo e para cada intervalo vou atribuir variáveis diferentes. Eu fiz este código para ele (2 intervalos até agora). A questão é: esta é a solução mais correta ou devo abordar a tarefa de maneira diferente?

extern int OH1=9;extern int OM1=0;extern int CH1=12;extern int CM1=0;
extern int OH2=13;extern int OM2=0;extern int CH2=15;extern int CM2=0;

int HourOpenTime()
{
int trade = 0;
if(isTradeTimeInt(OH1,OM1,CH1,CM1))trade = 1;
if(isTradeTimeInt(OH2,OM2,CH2,CM2))trade = 2;
return (trade);
}
 
bestseich:

Caro Igor Kim, ajude-me a escrever uma função como OrderCloseBy(), mas ela deve funcionar em pares diferentes e OrderProfit(), e não importa se as ordens são dirigidas de forma diferente ou não, como uma OrderProfit() > outra, outro par, por quantos pontos e ambos, exatamente, somente estes dois, fecham simultaneamente. Minha variante é assim:

para (int i=OrdensTotal()-1;i>=0;i--)

{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()!=Symbol()||OrderSymbol()==Symbol())
{
if(OrderProfit()>=pr*Point)//pr está em parâmetros, pontos lucro
int ot=OrderTicket();double op=OrderProfit();
if(OrderProfit()<=pru*(-1)*Point)//pru- está nos parâmetros, pontos de perda
int otu=OrderTicket();double opu=OrderProfit();
if(op>opu*v*(-1)&&(OrderType()==OP_BUY||OrderType()==OP_SELLL))
//v é uma relação lucro/perda, ou seja, 1,5
OrderClose(otu,OrderLots(),Bid,sleep,Blue);
OrderClose(ot,OrderLots(),Bid,sleep,Blue);
OrderClose(otu,OrderLots(),Ask,sleep,Blue);
OrderClose(ot,OrderLots(),Ask,sleep,Blue);

}}}

Será que vai funcionar? Corrija ou sugira sua própria solução, se você não se importa.

 

Caro Igor!

Você poderia informar se você tem uma função para calcular o volume do lote, dependendo do saldo da conta, após o fechamento do último pedido e antes de abrir o próximo?

Agradeço antecipadamente.

 
vasabu2012:

Caro Igor!

Você poderia informar se você tem uma função para calcular o volume do lote, dependendo do saldo da conta, após o fechamento do último pedido e antes de abrir o próximo?

Agradeço antecipadamente.

Aqui está a função de Igor.

Arquivos anexados:
b-lots.mqh  3 kb
 

Na atualização a função PriceOpenLastPos parou de funcionar nas condições, quase quebrou meu cérebro, dá valores nos comentários mas não funciona nas condições, uma pequena edição resolveu o problema.

double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
double r=0, r2=0;
int i, k=OrdersTotal();

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) {
if (t<OrderOpenTime()) {
t=OrderOpenTime();
r=OrderOpenPrice();
}
}
}
}
}
}
}

r2 = DoubleToStr(r, 4);

return(r2);
}


 
Por favor, ajude a recompilar a EA e-CloseByEquity.rar com mudanças na programação do MetaEditor