Como codificar? - página 50

 

Recuperar um tipo de dado a partir de um indicador

Hi

É possível recuperar um tipo de dado de um indicador (3 MA Cross w alert) para colocá-lo em um EA?

Isto é o que eu quero fazer:

No indicador (3 MA Cross w alert) eu coloco um tipo de dado :

double execute_trade = "ok_buy " ou execute_trade = "ok_sell" aqui :

************Indicator ************

se ((fasterMAnow > slowerMAnow &&

fasterMAprevious <= mais lentoMAprevious &&

fasterMAafter > slowerMAafter &&

mediumMAnow > slowerMAnow )

||

(fasterMAnow > slowerMAnow &&

mediumMAnow > slowerMAnow &&

médioMAprevious <= mais lentoMAprevious &&

mediumMAafter > slowerMAafter ))

{

CrossUp = Baixa - Alcance*0,5;

string execute_trade = "ok_buy";

}

se ((fasterMAnow < slowerMAnow &&

fasterMAprevious >= mais lentoMAprevious &&

mais rápidoMAafter < mais lentoMAafter &&

mediumMAnow < slowerMAnow )

||

(fasterMAnow < slowerMAnow &&

mediumMAnow < slowerMAnow &&

médioMAprevious >= mais lentoMAprevious &&

mediumMAafter < slowerMAafter ))

{

CrossDown = Alto + Alcance*0,5;

execute_trade = "ok_sell";

}

************************

e eu gostaria de recuperar o "excute_trade" em minha EA desta forma :

***********EA***************

if (excute_trade== "ok_buy")

Ordem = SIGNAL_BUY;

if (excute_trade== "ok_sell")

Ordem = SIGNAL_SELL;

****************************

Mas eu não sei como fazer

ajuda, por favor

Com os melhores cumprimentos

Arquivos anexados:
 
Julia:
Alguém pode ser tão gentil e me dizer como codificar o seguinte código?

Se meu Ea estiver ligado ao gráfico M30, quero que o código diga:

se(no cronograma M5, o encerramento de hoje é>o encerramento de ontem)

{

.........

}

O fechamento de hoje é o atual BID; o fechamento de ontem é independente do prazo, portanto não importa o prazo M30 ou M5.

if(Bid > iClose(NULL,PERIOD_D1,1))

{

...

}

 
natsirte:
Hi

É possível recuperar um tipo de dado de um indicador (3 MA Cross w alert) para colocá-lo em um EA?

Isto é o que eu quero fazer:

No indicador (3 MA Cross w alert) eu coloco um tipo de dado :

double execute_trade = "ok_buy " ou execute_trade = "ok_sell" aqui :

************Indicator ************

se ((fasterMAnow > slowerMAnow &&

fasterMAprevious <= mais lentoMAprevious &&

fasterMAafter > slowerMAafter &&

mediumMAnow > slowerMAnow )

||

(fasterMAnow > slowerMAnow &&

mediumMAnow > slowerMAnow &&

médioMAprevious <= mais lentoMAprevious &&

mediumMAafter > slowerMAafter ))

{

CrossUp = Baixa - Alcance*0,5;

string execute_trade = "ok_buy";

}

se ((fasterMAnow < slowerMAnow &&

fasterMAprevious >= mais lentoMAprevious &&

mais rápidoMAafter < mais lentoMAafter &&

mediumMAnow < slowerMAnow )

||

(fasterMAnow < slowerMAnow &&

mediumMAnow < slowerMAnow &&

médioMAprevious >= mais lentoMAprevious &&

mediumMAafter < slowerMAafter ))

{

CrossDown = Alto + Alcance*0,5;

execute_trade = "ok_sell";

}

************************

e eu gostaria de recuperar o "excute_trade" em minha EA desta forma :

***********EA***************

if (excute_trade== "ok_buy")

Ordem = SIGNAL_BUY;

if (excute_trade== "ok_sell")

Ordem = SIGNAL_SELL;

****************************

Mas eu não sei como fazer

ajuda, por favor

Com os melhores cumprimentos

Você deve usar a função iCustom para recuperar o valor dos amortecedores (ou seja, as setas);

duplo iCustom (símbolo de corda, int timeframe, nome da corda, ..., modo int, int shift)

Calcula o indicador personalizado especificado e retorna seu valor. O indicador personalizado deve ser compilado (arquivo *.EX4) e estar no diretório de indicadores do terminal_diretório de especialistas.

Parâmetros:

símbolo - Símbolo cujos dados devem ser usados para calcular o indicador. NULL significa símbolo atual.

timeframe - Período de tempo. Pode ser qualquer um dos valores de enumeração de Prazo. 0 significa o intervalo de tempo atual do gráfico.

nome - Indicador personalizado compilado nome do programa.

... - Parâmetros definidos (se necessário). Os parâmetros passados e sua ordem devem corresponder à ordem de desclassificação e ao tipo de variáveis externas do indicador personalizado.

modo - Índice de linha. Pode ser de 0 a 7 e deve corresponder ao índice utilizado por uma das funções SetIndexBuffer.

shift - Índice do valor retirado do buffer do indicador (shift relativo à barra atual a quantidade indicada de períodos atrás).

Amostra:

double val=iCustom(NULL, 0, "SampleInd",13,1,0);

No seu caso, a sintaxe deve ser :

if(iCustom(NULL, 0, "3 MA Cross w_Alert v2", p1, , , , p10, 0, 0) > 0) // Buy

{

...

}

if(iCustom(NULL, 0, "3 MA Cross w_Alert v2", p1, , , , p10, 1, 0) > 0) // Sell

{

...

}

Os parâmetros p1 a p10 são os valores a serem enviados ao indicador como os parâmetros externos. Por exemplo, p1 significa o valor a ser atribuído ao FasterMA, p2 ao FasterShift, e assim por diante até a última declaração externa p10 SoundAlert. Veja o código do indicador para saber a ordem e a significação dos mesmos.

 

Obrigado Michel.

Mas e se o código estiver em um código indicador?

Será que está:

if(Close[pos]>iHigh(Symbol(),PERÍODO_M5,[pos+1])?????

 
Beno:
Hoje estou lentamente corrigindo os erros em alguns se minhas ea's (e aprendendo muito no caminho), mas o que isto significa?

2007.10.24 21:22:24 1998.11.20 06:00 O Abismo GBPJPY,Daily: número duplo inválido como parâmetro 6 para a função OrderSend

Não consigo encontrar nada sobre esse erro que eu deveria estar olhando.

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Como você pode ver, o parâmetro seis é o stoploss. Certifique-se de que seu semáforo esteja definido como um int. Em seguida, certifique-se em seu comando OrderSend() de que você está multiplicando o prejuízo por ponto. Isto converte para o dobro certo para a moeda que você está negociando.

Exemplo por longo prazo:

ticketa=OrderSend(Symbol(),OP_BUY,lotsize,Ask,slip,Ask-intStopLoss*Point,Ask+intTakeProfit*Point, "Comment",magic,0,Green);

Exemplo para abreviar:

ticketb=OrderSend(Symbol(),OP_SELL,lotsize,Bid,slip,Bid+intStopLoss*Point,Bid-intTakeProfit*Point, "Comment",magic,0,Blue);

Espero que isto ajude.

 

Obrigado Wolfe

Isso ajudou muito, mas abriu um novo problema rs agora compra mas não vende bem não no lugar certo. Tenho tentado comprar o que todos os três índios são azuis e vender quando todos são vermelhos.

Acho que escolhi o nome certo "O Abismo" para a ea. pois é aí que estou sentado tentando codificar minha saída. LOL

2007.11.24 10:14:442007.11.23 12:00 O Abismo EURUSD,H4: Erro ao abrir ordem de venda: 0

VÁLVIDO Verificar para Sinais() {

duplo TML=iCustom(NULL,0, "TrendManager",TM_Period,TM_Shift,0,shift);

duplo TMS=iCustom(NULL,0, "TrendManager",TM_Period,TM_Shift,1,shift);

duplo hasOpenLong=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,1,shift) ;

double hasCloseLong=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,3,shift) ;

double hasOpenShort=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,0,shift) ;

double hasCloseShort=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,2,shift) ;

duplo SDLL=iCustom(NULL,0, "Slope Direction Line",período,método,preço,0,turno);

duplo SDLS=iCustom(NULL,0, "Slope Direction Line",período,método,preço,1,turno);

compra=falso;

vendeig=falso;

closebuy=false;

closesell=false;

bool Long1 = TML;

bool Short1 = TMS;

bool Long2 = SDLL;

bool Short2 = SDLS;

bool Long3 = hasOpenLong > hasCloseLong;

bool Short3 = hasOpenShort < hasCloseShort;

buysig = Long1 && Long2 && Long3;

sellig = Short1 && Short2 && Short3;

closebuy=sellig;

closesell=buysig;

}

CheckForOpen() {

se (último==Tempo[0]) voltar;

int res,ord;

entrada dupla,stop;

ord=CalculateCurrentOrders();

if (ord!=0) CheckForClose();

//---- condições de compra

se (compra< compra) {

res=OpenAtMarket(OP_BUY,Lots);

if (res<0) Print("Error opening BUY order : ",(GetLastError()));

else last=Time[0];

}

//---- condições de venda

se (vende< vendeig) {

res=OpenAtMarket(OP_SELL,Lots);

se (res<=0) Imprimir("Erro ao abrir ordem de venda : ",(GetLastError()));

else last=Time[0];

}

}

int OpenAtMarket(int mode,double lot) {

int tr,col;

duplo preço aberto;

tr=0; enquanto (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }

RefreshRates();

if (mode===OP_SELL) {

openprice=Licite;

col=Red;

} else {

//openprice=nd(Ask);

openprice=Ask;

col=azul;

}

EncomendarEnviar(Símbolo(),modo,lote,preço aberto,deslizamento,sl,tp,EAName+Magic,Magic,0,col);

}

retornar;

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

//| Verifique as condições de fechamento do pedido |

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

cheque vazioFechar() {

int total;

//----

total=OrdensTotal();

for(int i=total;i>=0;i--)

{

se(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continuar;

if(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continua;

//---- verificar tipo de pedido

if(OrderType()==OP_BUY && closebuy) CloseAtMarket(OrderTicket(),OrderLots());

if(OrderType()==OP_SELL && closesell) CloseAtMarket(OrderTicket(),OrderLots());

}

}

bool CloseAtMarket(int ticket,lote duplo) {

bool bres=falso; int tr;

tr=0; enquanto (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }

RefreshRates();

bres=OrderClose(ticket,lote,OrderClosePrice(),slippage,White);

if (!bres) Print("Error closing order : ",(GetLastError()));

}

 
Julia:
Obrigado Michel.

Mas e se o código estiver em um código indicador?

Será que está:

if(Close[pos]>iHigh(Symbol(),PERÍODO_M5,[pos+1])?????

Sim, pode ser; tudo depende do que você pretende fazer...

 

Help Plz - Converta estes em Mq4 - Muito obrigado

Prezados todos:

Estou construindo um sistema que acho muito bom, testei a idéia antes por 3 meses, agora estou tentando codificar um indicador que será o mais rápido possível no fórum para que possamos testá-lo e ele realmente fará bom dinheiro, acho eu:

Plz me ajude por enquanto a converter estas linhas em codificação mql4:

1 - Eu tenho o vairable X , isto terá um valor e estou calculando-o agora

SO Nós temos X como um número inteiro

2- o indicador deve verificar o Currnet GMT Time, Deve ser 6:00am GMT - Time Frame 1 H

-- verifique GMT TIME 6:00am, QUANDO esta vela fechar, precisamos calcular a seguinte Variável Desta vela:

Alto - Baixo = A

A / 2 = B

B - Alto = C = SL

D = X * 30%

Buy_Entry= D + C

Buy_Target= C + (X * 60%)

Sell_Entry= C - D

Venda _Target= C - (X * 60%)

Então:

Quero afogar o resultado como linhas na tabela com GreaN Area para compra e Red Area para Short According to Entry for Buy and Sell e SL

estas devem aparecer automaticamente assim que a vela GMT 6:00 terminar , Horário 1H, portanto a caluculação deve ser de acordo com as 6:00 às 6:59 da manhã GMT Vela alta e baixa

PLZ Converter isto em MQL4, para que eu possa testá-lo e voltar para aumentar o resultado

MUITO OBRIGADO

 
Beno:
Obrigado Wolfe

Isso ajudou muito, mas abriu um novo problema rs agora compra mas não vende bem não no lugar certo. Tenho tentado comprar o que todos os três índios são azuis e vender quando todos são vermelhos.

Acho que escolhi o nome certo "O Abismo" para a ea. pois é aí que estou sentado tentando codificar minha saída. LOL

Beno, não tenho certeza sobre este aqui. Normalmente não tenho tido boa experiência com o uso de indicadores de mudança de cor nos EA's. Abra sua janela de dados com seus indicadores anexados e descubra qual valor numérico é retornado para cada cor. Isso pode ajudar sua codificação, certifique-se também de estar chamando o buffer de indicadores correto no momento certo. (Tenho certeza de que você já fez isso) Você pode ter mais sorte com a ajuda se publicar toda a EA, se você realmente precisar de ajuda. Além disso, pessoalmente eu o codificaria com 2 funções separadas de Orderend(), uma dedicada a shorts, e outra dedicada a longs. Esta é apenas a minha opinião, torna as coisas mais fáceis de serem seguidas.

Boa sorte, todos nós já tivemos nossas próprias versões do "Abismo"!

 

Abraço Wolfe

Vou tentar a opção 2 Ordersend para ver o que acontece. uma vez que eu conseguir fazer isso, vou postar.

Razão: