Como codificar? - página 119

 

Estou tentando descobrir se isto está errado;

para (int i=qqea_alert_x_candles_ago; i>0; i--) {

// int i = 1;

qqea_up = iCustom(NULL,0, "QQE Alerta v3",0,i);

qqea_down = iCustom(NULL,0, "QQE Alerta v3",1,i);

if (qqea_up < qqea_down) {

se (i == 1) qqeacross = Verdadeiro;

qqea_long = Verdadeiro;

qqea_short = Falso;

} else if (qqea_up > qqea_down) {

se (i == 1) qqeacross = Verdadeiro;

qqea_long = Falso;

qqea_short = Verdadeiro;

}

}

}

deve verificar se há sinal válido até as barras "qqea_alert_x_candles_ago" de volta, mas depois tem (i === 1) que i===1 só acontece uma vez ??

 
matrixebiz:
Estou tentando descobrir se isto está errado;

para (int i=qqea_alert_x_candles_ago; i>0; i--) {

// int i = 1;

qqea_up = iCustom(NULL,0, "QQE Alerta v3",0,i);

qqea_down = iCustom(NULL,0, "QQE Alerta v3",1,i);

Print("qqea_up: ", qqea_up, "qqea_down: ", qqea_down);

if (qqea_up < qqea_down) {

se (i == 1) qqeacross = Verdadeiro;

qqea_long = Verdadeiro;

qqea_short = Falso;

} else if (qqea_up > qqea_down) {

se (i == 1) qqeacross = Verdadeiro;

qqea_long = Falso;

qqea_short = Verdadeiro;

}

}

}

deve verificar se há sinal válido até as barras "qqea_alert_x_candles_ago" de volta, mas depois tem (i === 1) que i===1 só acontece uma vez ??

Ao valor facial seu código parece bem, ou seja, assumindo "qqea_alert_x_candles_ago" > 0.

Seu problema, se isto não estiver funcionando, é mais do que o mesmo em relação ao iCustom.

Para que esta função funcione corretamente, você precisa passar um elemento de entrada para cada elemento de entrada no indicador real. Se você não fizer isso, ou passar os tipos de dados errados, então a icustom não retornará nada.

Eu adicionei uma declaração impressa no código acima. Use isto para determinar se os valores retornados do iCustom realmente contêm alguma coisa.

Abraço,

Hiachiever

 

Ajuda necessária com código para contar barras

Minha EA tem uma série de opções para calcular o prejuízo de uma posição aberta. Uma dessas opções é usar o baixo número das últimas "x" de barras de preço.

A linha de código atualmente usada dentro do EA para calcular o stoploss (SL) desta opção para uma posição longa é:

SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0));

StopLossBars é uma variável de entrada externa.

O problema que tenho é que quero que o valor do StopLossBars aumente a cada barra contada desde que a posição foi aberta até uma das minhas outras condições para que o StopLossBars passe por cima desta condição. Acho que uma linha de código, como:

StopLossBars = StopLossBars + BarsCountedSincePositionOpened

faria o truque. Infelizmente minha codificação é bastante limitada ao cut'n'paste e não sei como calcular ou codificar BarsCountedSincePositionOpened.

Alguém poderia me dizer como fazer isso, por favor?

 
hiachiever:
Ao valor facial seu código parece correto, ou seja, assumindo "qqea_alert_x_candles_ago" > 0.

Seu problema se isto não estiver funcionando é mais do que o mesmo em relação ao iCustom.

Para que esta função funcione corretamente, você precisa passar um elemento de entrada para cada elemento de entrada no indicador real. Se você não fizer isso, ou se passar os tipos de dados errados, então a icustom não retornará nada.

Eu adicionei uma declaração impressa no código acima. Use isto para determinar se os valores retornados do iCustom realmente contêm alguma coisa.

Abraço,

Hiachiever

O código é de outra EA, mas eu estava pensando que quando o loop vai para "qqea_alert_x_candles_ago" > 1 então esta afirmação "se (i == 1) qqeacross = True;" seria Falso agora, correto? Quando deve permanecer Verdadeiro até i>qqea_alert_x_candles_ago.

 

Ajudando

Prezados todos,

Eu recebi esta codificação de um colega. Ele me disse que isso deveria ser um bom indicador sinalizando SMA para cima ou para baixo. Alguém pode me ajudar a criar um indicador com esta codificação abaixo.

/*[[

Nome := SMA Up and Down

Janela Separada := não

Primeira cor := Azul

Primeiro tipo de desenho:= Linha

Use os segundos dados := Sim

Segunda cor := Vermelho

Segundo Tipo de Desenho := Linha

]]*/

Entradas : MAPeriod(10), Bandwide_UP(20),Bandwide_DOWN(20);

Variáveis : shift(0), cnt(0), sum(0), loopbegin1(0), loopbegin2(0), first(True), prevbars(0);

Variáveis : MA(0);

SetLoopCount(0);

// verificações iniciais

Se o período MAP < 1 então Sair;

// verificar se há carga adicional de barras ou recarga total

Se Barras 1 então primeiro = Verdadeiro;

prevbars = Barras;

// loopbegin1 e loopbegin2 impedem a contagem de barras excluídas as atuais

Se primeiro Então começar

loopbegin1 = Bars-MAPeriod-1;

Se loopbegin1 < 0 então Sair; // não há barras suficientes para contar

loopbegin2 = Bars-MAPeriod-1;

Se loopbegin2 < 0 então Sair; // não há barras suficientes para contar

primeiro = Falso; // este bloco deve ser avaliado apenas uma vez

Fim;

// convergência-divergência

loopbegin1 = loopbegin1+1; // barra de corrente deve ser recontada também

Para o turno = loopbegin1 Downto 0 Begin

MA = iMA(MAPeriod,MODE_SMA,shift);

SetIndexValue(shift,(MA+Bandwide_UP*point));

SetIndexValue2(shift,(MA-Bandwide_DOWN*point)); SetIndexValue2(shift,(MA-Bandwide_DOWN*point));

loopbegin1 = loopbegin1-1; // impedir a recontagem de barras anteriores

Fim;

Com os melhores cumprimentos,

Rogerio

 

ajuda necessária com o código

preciso de ajuda com o seguinte código no momento em que ele só abre uma ordem se o AC estiver acima ou abaixo de zero e quero que ele abra se o vermelho mudar para verde e versos de visto

duplo AC1 = iAC(NULL, 0, Corrente + 0);

duplo AC2 = iAC(NULL, 0, Corrente + 1);

se ((AC1 < AC2)) Ordem = SIGNAL_CLOSEBUY;

 
matrixebiz:
O código é de outra EA, mas eu estava pensando que quando o loop vai para "qqea_alert_x_candles_ago" > 1 então esta afirmação "se (i == 1) qqeacross = True;" seria Falso agora, correto? Quando deve permanecer Verdadeiro até i>qqea_alert_x_candles_ago.

Não, isso não é correto.

No loop for, você está começando em 6 e diminuindo para 1. Isto significa que no loop final, o para loop executa a verificação"se (i == 1) qqeacross = True;". O resultado final é que a saída será verdadeira se o qqeacross tiver ocorrido.

O único problema que isto pode apresentar é se o qqeacross foi definido como verdadeiro em um looop anterior. Para superar isto, você deve ter qqeacross = falso; antes do for loop. Desta forma, você pode assegurar que se qqeacross = verdadeiro, então ele foi definido pelo laço que acabou de ser completado.

Abraço,

hiachiever

 
Pussy Galore:
Minha EA tem uma série de opções para calcular o prejuízo de uma posição aberta. Uma dessas opções é usar o baixo número das últimas "x" de barras de preço.

A linha de código atualmente usada dentro da EA para calcular o stoploss (SL) desta opção para uma posição longa é:

SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0)));

StopLossBars é uma variável de entrada externa.

O problema que tenho é que quero que o valor do StopLossBars aumente a cada barra contada desde que a posição foi aberta até uma das minhas outras condições para que o StopLossBars passe por cima desta condição. Acho que uma linha de código, como:

StopLossBars = StopLossBars + BarsCountedSincePositionOpened

faria o truque. Infelizmente minha codificação é bastante limitada ao cut'n'paste e não sei como calcular ou codificar BarsCountedSincePositionOpened.

Alguém poderia me dizer como fazer isso, por favor?

A maneira de fazer isso é criar um vriable no escopo global (ou seja, antes do init)

por exemplo

no BarCount;

int init ()

Então, em seu código de stop loss use o seguinte:

se (BarCount<Bars)

{

SL=iLow(Symbol(),Period(),iLowest(Symbol(),Period(),MODE_LOW,StopLossBars,0)));

StopLossBars++;

BarCount=Bars;

}

Isto incrementará o StopLossBars em 1 em cada nova barra.

A única outra adição ao seu código seria redefinir 'StopLossBars' de volta seu valor padrão original quando uma nova negociação é aberta.

Abraço,

Hiachiever

 
denis68:
preciso de ajuda com o seguinte código no momento em que ele só abre uma ordem se o AC estiver acima ou abaixo de zero e quero que ele abra se o vermelho mudar para verde e versos de visto

duplo AC1 = iAC(NULL, 0, Corrente + 0);

duplo AC2 = iAC(NULL, 0, Corrente + 1);

se ((AC1 < AC2)) Ordem = SIGNAL_CLOSEBUY;

Bem, o que eu fiz foi abrir ou exibir os outros dois amortecedores no código indicador, remarcando estas duas linhas;

// SetIndexLabel(1,NULL);

// SetIndexLabel(2,NULL);

Então, com meu AC modificado, fiz uma chamada iCustom;

double ac1 = iCustom(NULL, 0, "AcceleratorMod", 1, 1);

duplo ac2 = iCustom(NULL, 0, "AcceleratorMod", 2, 1);

duplo ac11 = iCustom(NULL, 0, "AcceleratorMod", 1, 2);

duplo ac22 = iCustom(NULL, 0, "AcceleratorMod", 2, 2);

bool acbuy = ac2==0 && ac11==0; // mudanças no vermelho para verde

bool acsell = ac1==0 && ac22==0; // Verde muda para Vermelho

A esperança que ajuda

 

matrixebiz o que você quer dizer com "rem'ing out" estas duas linhas; e como faço isso, não consigo entrar no código do indicador AC que tentei,