Como codificar? - página 123

 
InTrance:
Não tente, faça-o

estou no trabalho... e o porto de metatrader está bloqueado aqui

 

Ei, eu ainda sou novo em programação, e estou tendo problemas para acrescentar as seguintes características a esta simples EA:

1. Tire proveito

2. Parar a perda

3. Parada de trilha

4. Número de pips para ativar o trailing stop

//---- input parameters

extern double Lots=0.1;

extern int Slippage=5;

int MagicNum = 98760;

bool longPosOpened, shortPosOpened;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int start()

{

double crossup = iCustom(NULL , 0, "18_28Cross", 1,18,1,28,1,0, 1);

double crossdown = iCustom(NULL , 0, "18_28Cross", 1,18,1,28,1,1,1);

if (crossup != EMPTY_VALUE)

{

if (!PosOpened(OP_BUY))

{

CloseAllOpenAndPendingTrades();

OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,Symbol(),MagicNum,0);

}

}

else if(crossdown != EMPTY_VALUE)

{

if (!PosOpened(OP_SELL))

{

CloseAllOpenAndPendingTrades();

OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,Symbol(),MagicNum,0);

}

}

return(0);

}

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

bool PosOpened(int orderType)

{

int total=OrdersTotal();

for(int cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() == Symbol() && OrderType() == orderType)

{

return(true);

}

}

return(false);

}

void CloseAllOpenAndPendingTrades()

{

int total = OrdersTotal();

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

{

OrderSelect(i, SELECT_BY_POS);

if(Symbol() != OrderSymbol()) continue; // important! only close positions of current currency pair

int type = OrderType();

bool result = false;

switch(type)

{

//Close opened long positions

case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 200);

break;

//Close opened short positions

case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 200);

break;

//Close pending orders

case OP_BUYLIMIT :

case OP_BUYSTOP :

case OP_SELLLIMIT :

case OP_SELLSTOP : result = OrderDelete( OrderTicket() );

}

}

return(0);

}

 

Como detectar um salto do sarabolizante?

Atualmente estou usando este código para detectar um salto:

if(iSAR(NULL,0,0.0.02,0.2,0)-iSAR(NULL,0,0.02,0.2,1)>1.0){ // se houver um salto para cima

Mas isto não parece funcionar bem.

Como posso detectar se o salmo está acima ou abaixo de minhas barras?

TIA

 
:: use seu procurador em metatrader.

IN10ÇÃO

ssvl:
estou trabalhando... e o porto de metatrader está bloqueado aqui
 
:: compare o resultado de seu sar com um fechamento atual[0]
ssvl:
Atualmente estou usando este código para detectar um salto:

if(iSAR(NULL,0,0.0.02,0.2,0)-iSAR(NULL,0,0.02,0.2,1)>1.0){ // se houver um salto para cima

Mas isto não parece funcionar bem.

Como posso detectar se o salmo está acima ou abaixo de minhas barras?

TIA
 

Ei IN10TION, você sabe de uma boa maneira de verificar se um comércio acabou de fechar para que a EA não coloque outro comércio (reentrada) até o próximo sinal chegar? Minha EA verifica a condição de comércio até 10 barras, mas se uma condição de comércio de Venda já foi atendida nas primeiras barras e fechada, quero que a EA pare de verificar até as 10 barras Offset e espere até o próximo sinal real?

Thansk

 

Use a função OrderHistory().

Lux

 
luxinterior:
Use a função OrderHistory().Lux

Obrigado, mas não tenho certeza de como isso funciona. Eu realmente não quero saber se um pedido foi apenas fechado, mas sim se um pedido foi apenas aberto e fechado dentro de tantos bares. Então, só coloque outro comércio na próxima entrada do sinal principal. Ainda estou tentando eliminar as reentradas rápidas de comércio quando uma ordem foi apenas aberta e fechada, mas as condições comerciais ainda são cumpridas. Eu quero que, de alguma forma, apenas faça uma negociação por sinal principal, portanto, mesmo que as condições comerciais ainda sejam válidas, não negocie novamente se já tiver sido negociado naquele sinal (incluindo compensação).

Deixe-me ver se eu posso explicar com um exemplo. Pode ser algo que não pode ser evitado.

EG: Digamos que eu estou usando QQE e VQI como um ponto de entrada de comércio de sinais (cruzamento QQE e VQI muda de compra para venda ou visto).

Agora estou adicionando uma opção SignalOffset de 6 barras porque a cruz QQE e o sinal VQI podem não acontecer exatamente na mesma barra.

Agora vamos dizer que há uma troca válida dentro de 2 barras uma da outra quando QQE e VQI concordam, então agora uma troca é colocada mas eu tenho um TP de 10 pips e a barra move 15 pips meu TP é atingido e a troca é fechada. As condições comerciais ainda são cumpridas por causa do meu Offset de 6 barras agora outra troca é colocada (reentrada) ruim se essa ou duas barras se moverem 100 pips e meu TP for 10, eu acabei de ter 10 trocas, ruim Eu só quero uma troca por sinal (Offset incluído)

Isso faz sentido? eu ainda quereria que o comércio se realizasse dentro das 6 barras se e o sinal contrário acontecesse e o outro comércio fosse fechado ainda.

Obrigado

 
:: faça uma variável [switch], se já houver 1 ordem de venda feita, ela pára de fazer outras vendas (o valor do switch é -1) & só reajustará quando houver um sinal de compra & ordem de compra feita (o valor do switch é 1)... algo extra (excedente) que você pode pensar é um reset do timer, no caso de haver uma grande tendência para cima ou para baixo, você pode ter 2 ou 3 vendas com uma espécie de intervalo entre as mesmas ordens (timing).

IN10ÇÃO

matrixebiz:
Obrigado, mas não tenho certeza de como isso funciona. Eu realmente não quero saber se um pedido foi apenas fechado, mas sim se um pedido foi apenas aberto e fechado dentro de tantos bares. Então, só coloque outro comércio na próxima entrada do sinal principal. Ainda estou tentando eliminar as reentradas rápidas de comércio quando uma ordem foi apenas aberta e fechada, mas as condições comerciais ainda são cumpridas. Eu quero que, de alguma forma, apenas faça uma negociação por sinal principal, portanto, mesmo que as condições comerciais ainda sejam válidas, não negocie novamente se já tiver sido negociado naquele sinal (incluindo compensação).

Deixe-me ver se posso explicar com um exemplo. Talvez seja algo que não possa ser evitado.

EG: Digamos que estou usando QQE e VQI como um ponto de entrada de comércio de sinais (cruzamento QQE e VQI muda de compra para venda ou vice-versa).

Agora estou adicionando uma opção SignalOffset de 6 barras porque a cruz QQE e o sinal VQI podem não acontecer exatamente na mesma barra.

Agora vamos dizer que há uma troca válida dentro de 2 barras uma da outra quando QQE e VQI concordam, então agora uma troca é colocada mas eu tenho um TP de 10 pips e a barra move 15 pips meu TP é atingido e a troca é fechada. As condições comerciais ainda são cumpridas por causa do meu Offset de 6 barras agora outra troca é colocada (reentrada) ruim se essa ou duas barras se moverem 100 pips e meu TP for 10, eu acabei de ter 10 trocas, ruim Eu só quero uma troca por sinal (Offset incluído)

Isso faz sentido? eu ainda quereria que o comércio se realizasse dentro das 6 barras se e o sinal contrário acontecesse e o outro comércio fosse fechado ainda.

Obrigado
 

Compartilhamento de dados entre 2 aplicações metatrader

Estou tentando escrever dados em um arquivo de um metatrader a fim de lê-los de um segundo metatrader.

O problema é que, quando estou tentando escrever para o c:\i1, estou recebendo a mensagem de erro "o caminho absoluto do arquivo "C:\i1.txt" não é permitido".

Qualquer idéia ou outra forma de compartilhar dados entre duas aplicações metatrader ?