Versão beta do livro online sobre programação MQL4 - por Sergey Kovalev (SK.) - página 7

 

Eu também me perguntaria por que o texto usa funções sem parênteses OrderType() OrderOpenPrice()

 
Climber:
// Критерии закрытия ордеров

if
(_OrdersTotal == 1) //Выполнять следующее если открыт 1 ордер
{
OrderSelect(0, SELECT_BY_POS);
Tip = OrderType;
OPrice = OrderOpenPrice;

if (Tip = 0) // Расчитать цену закрытия в зависимости от типа ордера (В=0,S=1)
{
Cprice = OPrice + (TakeProfit*Point) + Spread;
if (Bid >= Cprice)
{
Cls_B = True;
}
}
if (Tip = 1)                 
{
Cprice = OPrice - (TakeProfit*Point) - Spread;
if (Ask <= Cprice)
{
Cls_S = True;
}
}
Em seu código, não é a falta de parênteses que está errado, mas outros erros, como a falta de outro sinal de igualdade na condição (marcado em vermelho)
 
Não ajudou ==. Ainda assim o mesmo parênteses está escrito nos erros. O critério de fechamento não pode ser escrito no código, se for definido o lucro? Ou pode não funcionar, por exemplo, se o preço estiver subitamente próximo do TP e de repente mudar por vários pontos em um só tick, pulando sobre o TP?
 
Climber:
Ou poderia falhar, por exemplo, se o preço se aproxima repentinamente do TP e muda de repente por vários pips em um só tick, pulando sobre o TP?


Isto é teoricamente possível. Ou seja, o pedido ainda será fechado, mas pode ser fechado não ao preço TP, mas ao primeiro preço que aparecer.
Acho que você pode estar interessado em ler o Tutorial MQL4 - Trade Operations - Order Parameters and Trading Operations Rules . Trata de um exemplo semelhante com o escorregamento.

 
Outra característica original na fase de aprendizagem da programação - o tempo todo para colocar uma vírgula eu aperto a letra b, onde há uma vírgula no layout em inglês))))) Acontece que você escreve em russo, mas quando você coloca uma vírgula você esquece que o layout russo.
 
Climber:
Outra característica original na fase de aprendizagem da programação - o tempo todo para colocar uma vírgula eu aperto a letra b, onde há uma vírgula no layout em inglês))))) Acontece que você escreve em russo, mas quando você coloca uma vírgula você esquece que o layout russo.

É por isso que muitas pessoas escrevem software em inglês, sem usar russo, é mais rápido e fácil, o layout não muda com freqüência, e então o programa é adaptado ao russo para outra pessoa, se forem necessários comentários, apenas neste período de trabalho, é mais conveniente russificar, por alguma razão:) O layout em inglês é a base para as pessoas que estão envolvidas em tal escrita, o russo é usado em uma escala muito mínima, se você estimar % de uso do layout em inglês, é 99% do tempo. Eu costumava querer escrever programas em russo, mas depois de me divertir com 1C, esse desejo evaporou.
 
Rosh:
O problema é descoberto, nós o consertaremos.

Agora eu posso ver os desenhos em https://book.mql4.com/ru/metaeditor/compose
 

Não é uma discussão justa, rapazes. Se vocês não têm nada a dizer, digam, eu entendo.

 

Eu só espero que aqueles a quem escrevi tenham lido e respondido

 
Encontrei as funções de que preciso no fórum. Um retorna o número de barras do extremo ZigZag por seu número de barras e o segundo retorna o extremo ZigZag por seu número de barras. O primeiro me ajudará a determinar se surgiu um novo extremo do ZigZag (se o número de barra do ZigZag zero = 0) e proceder a partir daí para verificar outros critérios. A segunda também será útil. Mas é muito cedo para o segundo. Eu gostaria de lidar com o primeiro.

Eu implementei esta função no editor e criei um indicador. Eu não adicionei nem subtraí nada. Mas, durante a compilação, eu recebi tantos erros. Eles são horríveis. Depois tentei criar um Expert Advisor usando apenas esta função. Obtive o mesmo resultado.((
//+----------------------------------------------------------------------------+
//|  Возвращает номер бара экстремума ЗигЗага по его номеру.                   |
//|  Параметры:                                                                |
//|    sym - наименование инструмента  ("" - текущий символ)                   |
//|    tf  - таймфрейм                 ( 0 - текущий ТФ)                       |
//|    ne  - номер экстремума          ( 0 - текущий)                          |
//|    dp  - ExtDepth                                                          |
//|    dv  - ExtDeviation                                                      |
//|    bc  - ExtBackstep                                                       |
//+----------------------------------------------------------------------------+
int GetExtremumZZBar(string sym="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sym=="") sym=Symbol();
  double zz;
  int    i, k=iBars(sym, tf), ke=0;
 
  for (i=1; i<k; i++) {
    zz=iCustom(sym, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
O que está errado aqui? Por que está gritando sobre erros?