Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 182
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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(){
// нужна вот такая функция
}
O que acontece com o conjunto de estruturas quando a EA é reiniciada?
O que acontece com a matriz da estrutura quando a EA é reiniciada?
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.
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
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(
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.
As comissões não são levadas em conta no testador MT4?
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);
}