A desaceleração linear é um erro de programação ou uma característica do MT4? - página 4

 

só a construção abaixo vale a pena.


    bool Ok=true;
     for(i=OrdersTotal()-1;i>=0;i--){//проверяем наличие ордеров
      if(OrderSelect(i,SELECT_BY_POS)){
       if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic){
        if(OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
         Ok=false;
        }}}}

um pouco mais

    bool Ok=true;
    for(i=OrdersTotal()-1;i>=0;i--){//проверяем наличие ордеров
      if(OrderSelect(i,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic){
          if(OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
            Ok=false;
          }
        }
      }
    }

e já sabemos o que é executado em que sequência. Isto é apenas formatação. Mas também pode decompor o código em operações logicamente consistentes e separá-las em funções separadas. Assim, aliviando o algoritmo principal das pilhas de código emaranhadas.

 
micle:

O problema é a duplicação do código, o número excessivo de declarações condicionais. De facto, o código consiste em 99% de linhas de alguma forma incluindo o Se operador condicional; tenho a certeza de que se o analisarmos, o número de comparações poderá ser reduzido 10 vezes. Não só isto atrasa a execução, como também este código é difícil de ler. Uma pessoa que lhe faz adições tem pelo menos 2 tarefas principais:

1 - não quebrá-lo

2 - Acrescentar a funcionalidade necessária.

O código ilegível causa uma duplicação adicional de todos os tipos de verificações e comparações - e isto mais uma vez é uma despesa adicional. Olhando através do código, lembro-me pessoalmente de mim próprio há cerca de 25 anos, quando comecei a programar, e aprendi-o no manual para o PC Atari 800XL sem qualquer professor, só porque era interessante.

Claro que é interessante, o que "se" estamos a falar, há provavelmente o meu TOR - onde eu escrevo "se sim, então sim", e o programador interpreta-o no código, e há "se" relacionado com trabalho directo com ordens, e há muitas operações com ordens...

Naturalmente, pensei que se tratava de algum tipo de loop, cuja execução leva a múltiplas verificações das condições da ordem. E acontece que a situação só pode ser corrigida através da reescrita do código a partir do zero?

 
micle:

só a construção abaixo vale a pena.

um pouco mais

e já sabemos o que é executado em que sequência. Isto é apenas formatação. Mas pode também decompor o código em operações logicamente consistentes e separá-las em funções separadas. Assim, irá aliviar o algoritmo principal das pilhas de código emaranhado.

Mas não afecta de modo algum o desempenho?

 
micle:

Problemas com código duplicado

A duplicação não tem nada a ver com isso e nada a ver com os "se". A verdadeira desaceleração vem do trabalho com mandados.
 
micle:

só a construção abaixo vale a pena.


um pouco mais

e já sabemos o que é executado em que sequência. Isto é apenas formatação. Mas pode também decompor o código em operações logicamente consistentes e separá-las em funções separadas. Assim, aliviando o algoritmo principal das pilhas de código emaranhadas.

Argumentos muito fortes, o vosso código, onde posso ver um programador experiente?
 

rev 1.1

Para definir uma paragem de perda e filtragem de ordens pendentes, utilizamos duas variantes de MA espelho.
maMirror - calculado utilizando a função padrão iMA, funciona uma vez por barra, os dados são retirados dos preços abertos da barra
Algoritmo de cálculo:

Para venda:
ponto de cálculo inicial maMirror=iMA+pipsXHmaM(o/b)
ponto de cálculo subsequente maMirror=maMirror(1)-(iMA(0)+pipsXHmaM(o/b)-iMA(1)+pipsXHmaM(o/b))
o cálculo é completado após o ponto final do cálculo.

Para compra:
ponto de cálculo inicial maMirror=iMA-pipsXHmaL
pontos de cálculo subsequentes maMirror=maMirror(1)-(iMA(0)-pipsXLmaM-iMA(1)-pipsXLmaM)
O cálculo é terminado após o ponto final do cálculo.


Para simplificar os ToR é necessário colocar dois blocos de cálculo, que serão independentes um do outro em funcionamento e variáveis, e definidos pelo utilizador
maMBlock=0 - não utilizar blocos (utiliza-se o stop loss padrão)
maMBlock=1 - utilizar apenas o bloco #1.
maMBlock=2 - utilizar apenas o bloco #2 (é utilizado o bloco de paragem de perda padrão)
maMBlock=3 - utilizar os dois blocos

Bloco nº 1
Cálculo de stop loss. O Stop Loss é recalculado e a encomenda é actualizada em cada barra pelo valor do maMirror.
1 A variável StartPoint é utilizada para determinar o ponto de partida para o cálculo, se StartPoint=1 (o cálculo é efectuado depois de se tocar em maT), se StartPoint=2 (o cálculo é efectuado depois de se abrir a ordem).
1.1 Se StartPointO=1 então o cálculo é completado após a maT ser tocada;
1.2.Se StartPointO=2, a liquidação termina após a encomenda ser encerrada;
1.3 Se a paragem da perda não puder ser definida por maMirror, a ordem é fechada.
1.4 Levl_Zerro=0 (não utilizado), Levl_Zerro!=0 (o stop loss é actualizado para o valor máximo especificado a contar do preço de abertura, um valor negativo significa que o stop loss é convertido para um valor positivo)

Bloco 2
Cálculo de filtragem para encomendas pendentes
0.1 Para comprar uma encomenda, a encomenda é feita se maMirror>open preço da encomenda pendente
0.2 Para vender, as encomendas são feitas se maMirror<open preço da encomenda pendente
1 A variável StartPoint é utilizada para determinar o ponto de partida para o cálculo se StartPoint=1 (o cálculo é efectuado depois de se tocar em maT), se StartPoint=2 (o cálculo é efectuado depois de se abrir a ordem).
1.1 Se StartPointB=1, o cálculo é completado após o maT ser tocado;
1.2 Se StartPointB=2 (a liquidação termina após o encerramento da encomenda);
2. Se maMirrorDell=0 (não utilizado) maMirrorDell=1 (todas as encomendas abertas são eliminadas se as condições do ponto 0 não coincidirem)

Variáveis de utilizador
maMirrorO (ajustes por iMA)
maMirrorB (configurações iMA)
StartPointO
StartPointB
pipsXHmaMo
pipsXLmaMo
pipsXHmaMb
pipsXLmaMb
maMBlock

maMirrorDell

Ajuda a estimar tarefas, o cliente quer um novo trabalho, não sabe quanto estimar) Como não sou um programador, sou um engenheiro da academia aeroespacial)

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
O primeiro e talvez o mais importante problema é que o código é ilegível e não está estruturado. Pode ter um ToR bastante claro. Se compreender os ToR e escrever o código na direcção certa, este (em regra) dá um ganho significativo na velocidade de execução, mas também custa outro dinheiro.
 
-Aleks-:

Afecta de alguma forma o desempenho?

Neste exemplo em particular, não tem qualquer efeito. Não há nenhum desejo de lidar com tal formatação em todo o guião da EA, nem de reformatá-la completamente
 
zfs:
Argumentos muito fortes, o vosso código, onde posso ver um programador experiente?
O meu código não é do domínio público. Os desenvolvimentos comerciais funcionam em e em torno de servidores web altamente carregados. Em particular, o meu código calcula os engarrafamentos nas estradas de "várias" cidades como parte do projecto DorogaTV
 
TheXpert:
A duplicação não tem nada a ver com isto, nem os "se". A verdadeira desaceleração é dada pelo trabalho com encomendas.

Trabalhar com encomendas em código TK, ou talvez a própria TK, ou MT4 trabalhar com encomendas em geral?