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
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 ??
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?
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,
HiachieverO 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;
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
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
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,