Ajuda, linguagem Metastock
17 mensagens
|Página 1 de 1
Breakmouv
Continua a aparecer mas isto é apenas um inconveniente que não impede o sistema de funcionar pois o sistema não fecha uma ordem que não exista. è apenas uns apitos a mais
Um muito obrigado pela ajuda pois foi graças a ela que consegui criar uns stops que funcionam e que provavelmente ainda me vão fazer geito em outras ocasiões.
Continua a aparecer mas isto é apenas um inconveniente que não impede o sistema de funcionar pois o sistema não fecha uma ordem que não exista. è apenas uns apitos a mais

Um muito obrigado pela ajuda pois foi graças a ela que consegui criar uns stops que funcionam e que provavelmente ainda me vão fazer geito em outras ocasiões.
- Anexos
-
- Não.PNG (20.32 KiB) Visualizado 470 vezes
....PLPINTO, o problema que referiste aparece devido a existir duas variaveis independentes para criar os stops longos e os stops curtos......é natural que a variavel A1 mantenha o ultimo nivel de stop ate criar o proximo sinal longo, mesmo que pelo meio exista trades curtos.....o mesmo para a variavel que define o nivel de stop curto.
O que se pode fazer,na minha opiniao, é fundir as duas variaveis A1 e A2 numa unica que actualize o nivel stop comforme o ultimo sinal dado.....aqui vai uma possivel abordagem:
Dst:= vt_DoubleStochastic(lg,3,E );
Long:= cross(Dst,30);
Short:= cross(70,Dst);
A1:= If( Long=1 ,C,PREV);
A2:= If( Short=1 ,C,PREV);
A3:=ValueWhen(1,A1>0,A1);
A4:=ValueWhen(1,A2>0,A2);
A5:=If(Long=1,A3,If( Short=1 ,A4,PREV));
A6:=Cross((A5-100),L);
A7:=Cross(H,(A5+100));
breakmov
O que se pode fazer,na minha opiniao, é fundir as duas variaveis A1 e A2 numa unica que actualize o nivel stop comforme o ultimo sinal dado.....aqui vai uma possivel abordagem:
Dst:= vt_DoubleStochastic(lg,3,E );
Long:= cross(Dst,30);
Short:= cross(70,Dst);
A1:= If( Long=1 ,C,PREV);
A2:= If( Short=1 ,C,PREV);
A3:=ValueWhen(1,A1>0,A1);
A4:=ValueWhen(1,A2>0,A2);
A5:=If(Long=1,A3,If( Short=1 ,A4,PREV));
A6:=Cross((A5-100),L);
A7:=Cross(H,(A5+100));
breakmov
-
Visitante
Software CMS
Ok, obrigado pelo esclarecimento.
Assim à primeira vista parece ser bom, pelo menos em termos de aparência! :-)
Vou dar uma espreitadela no site deles; obrigado uma vez mais.
Bons negócios,
Zimix
Assim à primeira vista parece ser bom, pelo menos em termos de aparência! :-)
Vou dar uma espreitadela no site deles; obrigado uma vez mais.
Bons negócios,
Zimix
Está a melhorar
, só não consigo que quando se está short não apareça o stop do ultimo Long e vice versa.
Será que não é possivel ou sou eu que não encontro a solução?
Dst:= vt_DoubleStochastic(lg,3,E );
Long:= cross(Dst,30);
Short:= cross(70,Dst);
A1:= if( CROSS(Dst,30) ,c,prev);
A4:= if( CROSS(70,Dst) ,c,prev);
A2:=valuewhen(1,A1>0,A1);
A5:=valuewhen(1,A4>0,A4);
A3:= cross((A2-0.0020),L);
A6:= cross(H,(A5+0.0020));

Será que não é possivel ou sou eu que não encontro a solução?
Dst:= vt_DoubleStochastic(lg,3,E );
Long:= cross(Dst,30);
Short:= cross(70,Dst);
A1:= if( CROSS(Dst,30) ,c,prev);
A4:= if( CROSS(70,Dst) ,c,prev);
A2:=valuewhen(1,A1>0,A1);
A5:=valuewhen(1,A4>0,A4);
A3:= cross((A2-0.0020),L);
A6:= cross(H,(A5+0.0020));
- Anexos
-
- STOP 2.PNG (21.31 KiB) Visualizado 584 vezes
Com esta formula já consigo que dê os stops correctos:
Dst:= vt_DoubleStochastic(lg,3,E );
Long:= cross(Dst,30);
Short:= cross(70,Dst);
A1:= if( CROSS(Dst,30) ,c,prev);
A2:=valuewhen(1,A1>0,A1);
A3:=if(L<(A2-0.0020),-1,0);
A1:= if( CROSS(70,Dst) ,c,prev);
A2:=valuewhen(1,A1>0,A1);
A6:=if(H>(A2+0.0020),-1,0);
Só que o aparecimento de Short não anula os stops do long e vice versa. Embora eu ache que em automatico o sistema não os executa se puser o sistema a chamar por mim ele nunca mais se cala
Dst:= vt_DoubleStochastic(lg,3,E );
Long:= cross(Dst,30);
Short:= cross(70,Dst);
A1:= if( CROSS(Dst,30) ,c,prev);
A2:=valuewhen(1,A1>0,A1);
A3:=if(L<(A2-0.0020),-1,0);
A1:= if( CROSS(70,Dst) ,c,prev);
A2:=valuewhen(1,A1>0,A1);
A6:=if(H>(A2+0.0020),-1,0);
Só que o aparecimento de Short não anula os stops do long e vice versa. Embora eu ache que em automatico o sistema não os executa se puser o sistema a chamar por mim ele nunca mais se cala

Sim, é dentro desse genero, Breakmov.
Alterei a formula para o Double stoch e ficou:
Dst:= vt_DoubleStochastic(lg,3,E );
Long:= cross(Dst,30);
Short:= cross(70,Dst);
A1:= if( CROSS(Dst,30) ,c,prev);
A2:=valuewhen(1,A1>0,A1);
A3:=if(L<(A2-0.0020),-1,0);
mas aparece o stop quando estou curto em vez de longo. Estou mesmo baralhado!
Alterei a formula para o Double stoch e ficou:
Dst:= vt_DoubleStochastic(lg,3,E );
Long:= cross(Dst,30);
Short:= cross(70,Dst);
A1:= if( CROSS(Dst,30) ,c,prev);
A2:=valuewhen(1,A1>0,A1);
A3:=if(L<(A2-0.0020),-1,0);
mas aparece o stop quando estou curto em vez de longo. Estou mesmo baralhado!
oiii PLPINTO,
o problema que te apareceu deve-se ao modo como funciona a funçao cross....esta funçao so devolve o valor 1 na barra onde se deu o cross. Devido a este promenor é necessario criar um procedimento que te registe o valor de entrada enquanto nao ocorrer outro cross...aqui fica um possivel caminho:
A1:= if( CROSS(C,mov(C,10,S)) ,c,prev);
A2:=valuewhen(1,A1>0,A1);
A3:=if(L<(A2-0.0020),-1,0);
a funçao valuewhen apenas foi aplicada para nao te aparecer o valor zero enquanto nao existir o 1º cross.......o valor 0.0020 foi usado apenas como exemplo tendo em conta o cross eur/usd....
breakmov
o problema que te apareceu deve-se ao modo como funciona a funçao cross....esta funçao so devolve o valor 1 na barra onde se deu o cross. Devido a este promenor é necessario criar um procedimento que te registe o valor de entrada enquanto nao ocorrer outro cross...aqui fica um possivel caminho:
A1:= if( CROSS(C,mov(C,10,S)) ,c,prev);
A2:=valuewhen(1,A1>0,A1);
A3:=if(L<(A2-0.0020),-1,0);
a funçao valuewhen apenas foi aplicada para nao te aparecer o valor zero enquanto nao existir o 1º cross.......o valor 0.0020 foi usado apenas como exemplo tendo em conta o cross eur/usd....
breakmov
-
breakmov
Então deverá ser mesmo para usar o IF
Se não está a funcionar é porque algo que fizeste está errado. Pois o IF é mesmo para isso
Do tipo:
IF (Long:= CROSS(C,mov(C,10,S); ) {
"Função de Saída com movimento de 20pips em sentido contrário" }
ou
IF (Long:= CROSS(C,mov(C,10,S); ) THEN {
"Função de Saída com movimento de 20pips em sentido contrário" }
Será por isso algo do género, uma vez que não conheço a linguagem metastock
Se não está a funcionar é porque algo que fizeste está errado. Pois o IF é mesmo para isso
Do tipo:
IF (Long:= CROSS(C,mov(C,10,S); ) {
"Função de Saída com movimento de 20pips em sentido contrário" }
ou
IF (Long:= CROSS(C,mov(C,10,S); ) THEN {
"Função de Saída com movimento de 20pips em sentido contrário" }
Será por isso algo do género, uma vez que não conheço a linguagem metastock
Ajuda, linguagem Metastock
Imaginem que eu dou uma ordem de compra assim:
Long:= CROSS(C,mov(C,10,S);
e queria dár uma ordem de stop se o preço se movimenta-se 20 pips em sentido contrario.
Alguem me sabe dizer qual a formula para que a ordem de stop só seja activada se o Long for verdadeiro?
Desde já agradeço qualquer ajuda.
Long:= CROSS(C,mov(C,10,S);
e queria dár uma ordem de stop se o preço se movimenta-se 20 pips em sentido contrario.
Alguem me sabe dizer qual a formula para que a ordem de stop só seja activada se o Long for verdadeiro?
Desde já agradeço qualquer ajuda.
17 mensagens
|Página 1 de 1