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

 
Lisi4ka330:
Por favor, me diga por que há vantagens em troca(StrToTime(ye+"."+mo+".01").
As vantagens neste contexto substituem a funçãoStringConcatenate().
 
Obrigado.... big)))))
 

Função ProfitIFStopInCurrency()

Eu precisava de uma função para meu painel informativo no outro dia que devolvesse o lucro/perda estimado na moeda do depósito quando um grupo de posições acionasse suas paradas. Bem, não é a primeira vez que escrevo tal função. Eu o testei longa e duramente em diferentes corretoras e em diferentes instrumentos com diferentes formas de cálculo de lucro. Se você não sabe, há três deles: Forex, CFD e Futuros. Mas não consigo encontrar a diferença entre o Forex e o Futures, mas ainda incluí a possibilidade de cálculos diferentes no código. A perda máxima que pode ser devolvida pela função é artificialmente limitada pelo saldo da conta corrente. Tradicionalmente, você pode passar parâmetros para a função e assim filtrar as posições que você precisa para a análise:

  • sy - Nome do instrumento. Se você definir este parâmetro, a função verificará apenas as posições do instrumento especificado. NULL significa o instrumento atual, e "" (por padrão) significa qualquer instrumento.
  • op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
  • mn - Identificador de posição (MagicNumber). O valor padrão -1 significa qualquer MagicNumber.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.05.2012                                                     |
//|  Описание : Возвращает предполагаемую прибыль/убыток в валюте депозита     |
//|             в случае срабатывания стопа открытых позиций.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double ProfitIFStopInCurrency(string sy="", int op=-1, int mn=-1) {
  if (sy=="0") sy=Symbol();  // Текущий символ
  int    i, k=OrdersTotal(); // Подсчёт открытых позиций
  int    m;                  // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
  double l;                  // Размер контракта в базовой валюте инструмента
  double p;                  // Размер пункта в валюте котировки
  double t;                  // Минимальный шаг изменения цены инструмента в валюте котировки
  double v;                  // Размер минимального изменения цены инструмента в валюте депозита
  double s=0;                // Подсчёт стопа в валюте депозита

  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op)) {
          l=MarketInfo(OrderSymbol(), MODE_LOTSIZE);
          m=MarketInfo(OrderSymbol(), MODE_PROFITCALCMODE);
          p=MarketInfo(OrderSymbol(), MODE_POINT);
          t=MarketInfo(OrderSymbol(), MODE_TICKSIZE);
          v=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
          if (OrderType()==OP_BUY) {
            if (m==0) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots();
            if (m==1) s-=(OrderOpenPrice()-OrderStopLoss())/p*v/t/l*OrderLots();
            if (m==2) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots();
            s+=OrderCommission()+OrderSwap();
          }
          if (OrderType()==OP_SELL) {
            if (OrderStopLoss()>0) {
              if (m==0) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots();
              if (m==1) s-=(OrderStopLoss()-OrderOpenPrice())/p*v/t/l*OrderLots();
              if (m==2) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots();
              s+=OrderCommission()+OrderSwap();
            } else s=-AccountBalance();
          }
        }
      }
    }
  }
  if (AccountBalance()+s<0) s=-AccountBalance(); // Ограничение убытка балансом счёта
  return(s);
}

HH. O anexo aqui é o roteiro para testar a função ProfitIFStopInCurrency().

Arquivos anexados:
 

Função ProfitIFTakeInCurrency()

Esta função é semelhante à anterior, somente retorna o lucro/perda estimado na moeda do depósito quando um grupo de posições aciona sua tomada. O método de cálculo do lucro também é levado em conta: Forex, CFD e Futuros .O lucro máximo que a função pode retornar é artificialmente limitado pelo número 999.999.999.999. Parâmetros:

  • sy - Nome do instrumento. Se você especificar este parâmetro, a função só verificará as posições do instrumento especificado. NULL significa o instrumento atual, e "" (padrão) significa qualquer instrumento.
  • op - Operação comercial, tipo de posição. Valores válidos: OP_BUY, OP_SELL ou -1. O valor padrão -1 significa qualquer posição.
  • mn - Identificador de posição (MagicNumber). O valor padrão -1 significa qualquer MagicNumber.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.05.2012                                                     |
//|  Описание : Возвращает предполагаемую прибыль/убыток в валюте депозита     |
//|             в случае срабатывания тейка открытых позиций.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double ProfitIFTakeInCurrency(string sy="", int op=-1, int mn=-1) {
  if (sy=="0") sy=Symbol();  // Текущий символ
  int    i, k=OrdersTotal(); // Подсчёт открытых позиций
  int    m;                  // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
  double l;                  // Размер контракта в базовой валюте инструмента
  double p;                  // Размер пункта в валюте котировки
  double t;                  // Минимальный шаг изменения цены инструмента в валюте котировки
  double v;                  // Размер минимального изменения цены инструмента в валюте депозита
  double s=0;                // Подсчёт стопа в валюте депозита

  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op)) {
          l=MarketInfo(OrderSymbol(), MODE_LOTSIZE);
          m=MarketInfo(OrderSymbol(), MODE_PROFITCALCMODE);
          p=MarketInfo(OrderSymbol(), MODE_POINT);
          t=MarketInfo(OrderSymbol(), MODE_TICKSIZE);
          v=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
          if (OrderType()==OP_BUY) {
            if (OrderTakeProfit()>0) {
              if (m==0) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v*OrderLots();
              if (m==1) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v/t/l*OrderLots();
              if (m==2) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v*OrderLots();
              s+=OrderCommission()+OrderSwap();
            } else s=999999999;
          }
          if (OrderType()==OP_SELL) {
            if (m==0) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v*OrderLots();
            if (m==1) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v/t/l*OrderLots();
            if (m==2) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v*OrderLots();
            s+=OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(s);
}

HH. Anexei um roteiro para testar a função ProfitIFTakeInCurrency().

Arquivos anexados:
 
Uma lista de todas as minhas características com breves descrições e links para os postos de publicação.
Arquivos anexados:
 
Olá! você não tem algum tipo de modelo (para iniciantes) para facilitar a escrita de um EA para o testador e para uma negociação real. Algo não está se movendo((((
 
Chuma:
Olá! você não tem algum tipo de modelo (para iniciantes) para facilitar a escrita de um EA para o testador e para uma negociação real. Algo não está se movendo((((
Modelo? :)) Bem, tome qualquer um dos meus EAs como ponto de partida...
 
KimIV:
Modelo? :)) Portanto, tomem qualquer um dos meus EAs como ponto de partida...

Obrigado.... coisas interessantes e úteis em geral.... mas por enquanto estou planejando criar um consultor comercial que abriria e fecharia posições com base nos sinais mais simples (cruzando médias, por exemplo) para começar, mas todas essas verificações, determinando o lote etc. .... o quê, quando e como... um pouco complicado....

 
então a idéia de um modelo também me passou pela cabeça.... Eu apoio "companheiros inexperientes" ))))))
 

Igor, peço desculpas por minhas frequentes perguntas, e espero realmente que isto não seja muito difícil para você..... Você poderia me dizer o que se entende por

gbDisabled

na função OpenPosition() para on-line

aqui está uma parte do código:

// Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза

Ao compilar dá um erro de que a variável não está definida.

Razão: