Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 182

 
Artyom Trishkin:
E você não mostrou uma única parte de seu código - não está claro porque você está mostrando um exemplo.

struct p{

double trailingProfit;

int orders[10];

bool flagOpen;// флаг , указывающий на открытость позиции

//тут еще куча связанных параметров

};


p order[];

int OrderN=-1;


int OnInit()
  {

   ArrayResize(pair,1,1000);
 

   return(INIT_SUCCEEDED);
  }

void openOrder(price){

       OrderN++;

       int t;

       ArrayResize(orders,order+1);

      t=OrderSend(Symbol(),OP_BUYSTOP,2,(NormalizeDouble(price,Digits)),3,0,0,"pair",MAGICN,0,Blue);
      if(t==0) Print("не удалось выставить ордер BUYSTOP ", price);

      for(intj=0,j<10,++j){     

      if(orders[OrderN].orders==0) orders[OrderN].orders=t;

      break;

      }

      orders[OrderN].flagOpen=1;

}

//...... тут идет обработка позиций...

void massCut(){

// нужна вот такая функция

}

Quando a EA está trabalhando há muito tempo, a matriz se torna grande demais para o processamento e precisamos reduzi-la. Todas as antigas encomendas fechadas estão no início e tudo após a primeira encomenda encontrada deve ser deixado em aberto.
 
Evgenii:

...
Quando a EA está em funcionamento há muito tempo, a matriz torna-se muito grande para ser processada e precisamos reduzi-la. Todas as antigas ordens fechadas estão no início, tudo após a primeira ordem aberta encontrada deve ser deixado.

O que acontece com o conjunto de estruturas quando a EA é reiniciada?

 
Artyom Trishkin:

O que acontece com a matriz da estrutura quando a EA é reiniciada?

a matriz vai cair, este problema não foi resolvido.
 
Evgenii:
A matriz será apagada, esta questão não foi resolvida.

Aí. E isto deveria ter sido considerado em primeiro lugar.

A conclusão é óbvia: a matriz tem que ser zerada e preenchida novamente com o estado atual dos pedidos e posições. Mas isto só deve ser feito quando você pegar mudanças na quantidade de pedidos ou posições na conta.

Você sempre terá em mãos apenas o estado atual das ordens e posições, e não haverá necessidade de se preocupar em eliminar ordens/posições inexistentes da matriz. E a lista de ordens/posições terá que ser percorrida completamente, ou por um determinado período do histórico, mas somente em casos específicos - quando o número de ordens/posições na conta mudar.

 
Alexey Viktorov:
Por que você precisa de uma perversão assim?

Para que o OnInit não gire a cada reinicialização e reduza a matriz estática em uma única instância porque em alguns lugares ela é escrita duas vezes... em geral, isto é otimização de recursos
... Vou deixar as coisas como estão, é mais simples no momento
 
LRA:
Você declara uma matriz global sem especificar um tamanho. Sua função define seu tamanho por ArrayResize. E é visível globalmente, e o OnInit é lançado...

Não é bem assim, a matriz é estática com valores claramente definidos, não faz sentido inicializá-la separadamente(
 
Money_Maker:

para evitar que o OnInit gire a cada reinicialização e para reduzir a matriz estática a uma instância porque em alguns lugares ela é escrita duas vezes... em geral isso é otimização de recursos
... Vou deixar as coisas do jeito que estão agora.
Para evitar o looping no OnOnit() a cada reinicialização, basta verificar o motivo da desinicialização UninitializeReason(), e eu não recebo mais nada. O que significa reduzir uma matriz estática? Bem, em geral, você sabe melhor.
 
As comissões não são levadas em conta no testador MT4?
 
Andrey Dik:
As comissões não são levadas em conta no testador MT4?
Parece que você tem que estar conectado a uma conta com uma comissão para que ela seja levada em conta.
 

Pergunta sobre a função Print(); como fazer Print() imprimir os dados mais a data (dia) no EA ? ajudar um iniciante a entender o plz, colocar o código refeito para a experiência, induzir o "pivot" antes de cbs!


o próprio código: PivotsDaily v2.mq4


#janela_do_cartão_indicador de propriedade

#property indicator_buffers 3

#indicador de propriedade_color1 Lime

#código de propriedade_color2 Azul

#indicador de propriedade_cores3 Vermelho


//---- parâmetros de entrada

Externo interno Barras Contabilizadoras=300;

//---- buffers

duplo PBuffer[];

duplo S1Buffer[];

duplo R1Buffer[];


Pivot de corda="P", Sup1="S 1", Res1="R 1";


int fontsize=10;

duplo P,S1,R1,S2,R2,R2,S3,R3;

duplo LastHigh,LastLow,x;

//+------------------------------------------------------------------+

//| Função de desinicialização do indicador do cliente |

//+------------------------------------------------------------------+

int deinit()

{


ObjectDelete("Pivot");

ObjectDelete("S1");

ObjectDelete("R1");

retorno(0);

}

//+------------------------------------------------------------------+

//| Função de inicialização do indicador personalizado |

//+------------------------------------------------------------------+

int init()

{

nome_curto_de_filtro;


IndicatorBuffers(7);

//---- linha indicadora

SetIndexStyle(0,DRAW_ARROW,2,1,Lime);

SetIndexArrow(0,158);

SetIndexStyle(1,DRAW_ARROW,2,1,Blue);

SetIndexArrow(1.158);

SetIndexStyle(2,DRAW_ARROW,2,1,Red);

SetIndexArrow(2.158);


SetIndexBuffer(0,PBuffer);

SetIndexBuffer(1,S1Buffer);

SetIndexBuffer(2,R1Buffer);


//---- nome para DataWindow e subwindow do indicador

short_name="Pivot";

IndicatorShortName(short_name);

SetIndexLabel(0,short_name);

short_name="R1";

IndicatorShortName(short_name);

SetIndexLabel(2,short_name);


short_name="S1";

IndicatorShortName(short_name);

SetIndexLabel(1,short_name);


SetIndexDrawBegin(0,6);

//----


retorno(0);

}

//+------------------------------------------------------------------+

//| Função de iteração de indicador personalizada |

//+------------------------------------------------------------------+

int start()


{

int counted_bars=IndicatorCounted();


int limit, i;

//---- cálculo do indicador

se (counted_bars==0)

{

x=Periodo();

se (x>CountBars) retornar(-1);

ObjectCreate("Pivot", OBJ_TEXT, 0, 0,0);

ObjectSetText("Pivot", " Pivot",10, "Arial",Lime);

ObjectCreate("S1", OBJ_TEXT, 0, 0, 0, 0);

ObjectSetText("S1", " S1",10, "Arial",Blue);

ObjectCreate("R1", OBJ_TEXT, 0, 0, 0, 0);

ObjectSetText("R1", " R1",10, "Arial",Vermelho);

}

if(counted_bars<0) return(-1);


limit=(Bars-counted_bars)-1;


para (i=limite; i>=0;i--)

{

if (TimeDayOfWeek(Time[i]) != 0)

{

if (High[i+1]>LastHigh) LastHigh=High[i+1];

if (Baixo[i+1]<Último[i+1]) LastLow=Low[i+1];

}


se (

TimeDay(Time[i])!=TimeDay(Time[i+1]) && TimeDayOfWeek(Time[i])!=0

)

{

P=Fechar[i+1];

R1 = LastLow;

S1 = LastHigh;

S2=Alto[i]-Baixo[i];

S3=High[i]-Open[i+1];

if(S3==0)

{R2 = S3;} senão {R2 = S2/S3;}

Imprimir("R2 ",R2); // <= como obter a impressora mais os dados para imprimir a data?


LastLow=Open[i]; LastHigh=Open[i];

ObjectMove("Pivot", 0, Time[i],P);

ObjectMove("S1", 0, Tempo[i],S1);

ObjectMove("R1", 0, Tempo[i],R1);

}

PBuffer[i]=P;

S1Buffer[i]=S1;

R1Buffer[i]=R1;

}

//----

retorno(0);

}

Razão: