Como codificar? - página 197

 

Alguém pode ajudar a codificar esta EA?

Olá,

Atualmente estou negociando com um martingale EA que abrirá no máximo 4 níveis de ordens. Apenas penso em uma estratégia de hedging que pode reduzir o risco de usar essa EA. Abaixo está uma descrição da minha estratégia:

1. O EA de hedging irá monitorar o saque das ordens de abertura. Se as perdas flutuantes totais forem maiores que uma quantia pré-determinada, isso acionará a EA a abrir uma ordem de hedged em oposição às ordens de abertura.

2. O tamanho do lote da ordem coberta é calculado com base em um múltiplo (o usuário pode definir o múltiplo) do tamanho do lote da última ordem de abertura (por exemplo, se o tamanho do lote da última ordem de nível for 1,6 e o múltiplo for definido em 2, então a ordem coberta será aberta com o tamanho do lote em 3,2.

3. Quando a ordem coberta retornar ao seu nível de abertura, a ordem coberta será fechada automaticamente.

4. Quando a cesta geral (as ordens de abertura + a ordem coberta) atingir um montante de lucro líquido pré-determinado, todas as ordens serão fechadas.

Será que algum bom programador pode codificar esta EA de hedging para mim? Acho que será muito útil também para outros martingale EA. Muito obrigado!

Com os melhores cumprimentos,

Wallace

 

whoa...

obrigado, pessoal...

que tal comprar parada e vender parada?

basta mudar "COMPRAR" ali?

só quero 2 posições apenas para 1 par, não mais do que isso...

desculpe, ainda novato...

 

Como codificar esta indis na EA ?

Olá, sou um novo aprendiz e interessado em aprender mql, alguém pode me dizer como codificar isto na EA ?

Externo int Fast.MA.Período = 5;

extern int Slow.MA.Período = 34;

Int.externa Sinal.período = 5;

//---- buffers

duplo tampão1[],

Buffer2[],

b2[],

b3[];

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

//| Função de inicialização do indicador personalizado |

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

int init()

{

//---- indicadores

// dois amortecedores adicionais utilizados para a contagem

IndicatorBuffers(4);

IndicatorShortName("MA_5_34");

SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(0,242); // down 226 234 242

SetIndexBuffer(0,b2);

SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(1,241); //UP 225 233 241

SetIndexBuffer(1,b3);

// Estes amortecedores não são traçados, apenas usados para determinar setas

SetIndexBuffer (2,Buffer1);

SetIndexBuffer (3,Buffer2);

//----

retorno(0);

}

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

//| Função de desinicialização do indicador do cliente |

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

int deinit()

{

//----

retorno(0);

}

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

//| Função de iteração de indicador personalizada |

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

int start()

{

int i, counted_bars=IndicatorCounted();

duplo MA5,MA34;

int limit=Barras_contadas_combars;

Imprimir(" limite de impressão = ", limite);

if(counted_bars>0) limit++; <----pode alguém me explicar o que isso significa?

// Linha principal

para(i=0; i<limite; i++) <----pode alguém me explicar o que isso significa?

{

MA5=iMA(NULL,0,Fast.MA.Período,0,MODE_SMA,PRICE_MEDIAN,i);

MA34=iMA(NULL,0,Slow.MA.Período,0,MODE_SMA,PRICE_MEDIAN,i);

Buffer1=MA5-MA34;

}

// Linha de sinal

para(i=0; i<limite; i++) <----pode alguém me explicar o que significa ?

{

Buffer2=iMAOnArray(Buffer1,Barras,Sinal.período,0,MODE_LWMA,i);

} <----pode alguém me explicar o que isso significa?

// Setas

para(i=0; i<limite; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = Alto+10*Ponto;

if(Buffer1 Buffer2)

b3 = Ponto Baixo-10*; <----pode alguém me explicar o que isso significa?

}

//----

retorno(0);

}

Obrigado, pessoal =^_^=

 
liew_stanley:
if(counted_bars>0) limit++; <----podem alguém me explicar o que significa ?

// Linha principal

para(i=0; i<limite; i++) <----pode alguém me explicar o que isso significa?

// Linha de sinal

para(i=0; i<limite; i++) <----pode alguém me explicar o que significa?

{

Buffer2=iMAOnArray(Buffer1,Barras,Sinal.período,0,MODE_LWMA,i);

} <----pode alguém me explicar o que isso significa?

// Setas

para(i=0; i<limite; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = Alto+10*Ponto;

if(Buffer1 Buffer2)

b3 = Ponto Baixo-10*; <----pode alguém me explicar o que isso significa?

Obrigado, pessoal =^_^=

É fácil.

Quando você inicia seu índico, Bars=1000 (por exemplo) e counted_bars=0. Então limit=1000 e seu índico calcula todas as 1000 barras. Depois disso, counted_bars=1000, e cada novo tick indi calcula apenas a última (zero) barra. Quando chegar a próxima barra, limit=1 e indi recalcula duas últimas barras.

b3 = Low-10*Point; - é apenas uma linha 10 pontos mais baixa do que o mínimo da barra.

 
liew_stanley:
Olá, sou um novo aprendiz e interessado em aprender mql, alguém pode me dizer como codificar isto em EA ?

Fast.MA.Período = 5;

Int.Ext. Lento.MA.Período = 34;

Int.Externo Sinal.período = 5;

//---- buffers

duplo tampão1[],

Buffer2[],

b2[],

b3[];

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

//| Função de inicialização do indicador personalizado |

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

int init()

{

//---- indicadores

// dois amortecedores adicionais utilizados para a contagem

IndicatorBuffers(4);

IndicatorShortName("MA_5_34");

SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(0,242); // down 226 234 242

SetIndexBuffer(0,b2);

SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,3);

SetIndexArrow(1,241); //UP 225 233 241

SetIndexBuffer(1,b3);

// Estes amortecedores não são traçados, apenas usados para determinar setas

SetIndexBuffer (2,Buffer1);

SetIndexBuffer (3,Buffer2);

//----

retorno(0);

}

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

//| Função de desinicialização do indicador do cliente |

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

int deinit()

{

//----

retorno(0);

}

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

//| Função de iteração de indicador personalizada |

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

int start()

{

int i, counted_bars=IndicatorCounted();

duplo MA5,MA34;

int limit=Barras_contadas_combars;

Imprimir(" limite de impressão = ", limite);

if(counted_bars>0) limit++; <----pode alguém me explicar o que isso significa?

// Linha principal

para(i=0; i<limite; i++) <----pode alguém me explicar o que isso significa?

{

MA5=iMA(NULL,0,Fast.MA.Período,0,MODE_SMA,PRICE_MEDIAN,i);

MA34=iMA(NULL,0,Slow.MA.Período,0,MODE_SMA,PRICE_MEDIAN,i);

Buffer1=MA5-MA34;

}

// Linha de sinal

para(i=0; i<limite; i++) <----pode alguém me explicar o que significa ?

{

Buffer2=iMAOnArray(Buffer1,Barras,Sinal.período,0,MODE_LWMA,i);

} <----pode alguém me explicar o que isso significa?

// Setas

para(i=0; i<limite; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = Alto+10*Ponto;

if(Buffer1 Buffer2)

b3 = Ponto Baixo-10*; <----pode alguém me explicar o que isso significa?

}

//----

retorno(0);

}

Obrigado, pessoal =^_^=

Se você quiser usar este indicador em uma ea você pode usar a função icustom() para acessá-lo. você não precisa realmente entender nenhum código do indicador, apenas os dados que ele cospe. Pelo menos essa é a maneira mais fácil de fazer isso.

 
fxcourt:
Se você quiser usar este indicador em uma ea você pode usar a função icustom() para acessá-lo. você não precisa realmente entender nenhum código do indicador, apenas os dados que ele cospe. Pelo menos essa é a maneira mais fácil de fazer isso.

Ou seja, use a função icustom() na EA para lembrar o indis ? como a codificação a ser escrita na EA ? pode me dar alguma orientação ?

Muito Obrigado

 
toiii:
whoa...

obrigado, pessoal...

que tal comprar parada e vender parada?

basta mudar "COMPRAR" ali?

só quero 2 posições apenas para 1 par, não mais do que isso...

desculpe, ainda novato...

Leia isto

Tutorial MQL4

 

Esta codificação é correta?

Duplo TakeProfit externo=100;

duplo externo Lots=1;

duplo Exterior TrailingStop=35;

externo int ShortEma = 5;

Exterior int LongEma = 34;

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

//| função de iniciação de especialista |

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

int init()

{

//----

//----

retorno(0);

}

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

//| função de desinicialização especializada |

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

int deinit()

{

//----

//----

retorno(0);

}

int Crossed (linha dupla1 , linha dupla2)

{

estática int última_direção = 0;

int estática corrente_direção estática = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //down

if(current_direction != last_direction) //change

{

última_direção = direção_corrente;

retorno (última_direção);

}

senão

{

retorno (0);

}

}

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

//| função de início especializado |

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

int start()

{

//----

int total;

duplo curtoEma, longoEma;

shortEma = iCustom(NULL,0, "Test_Demo",13,0,0);

longEma = iCustom(NULL,0, "Test_Demo",54,0,0);

Print("shortEma = " + shortEma + " : longEma = " + longEma);

int isCrossed = 0;

isCrossed = Crossed (LongEma,ShortEma);

total = OrdensTotal();

if(total < 1)

{

if(isCrossed == 1)

{

1=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "My EA",12345,0,Green);

if(1>0)

{

if(OrderSelect(1,SELECT_BY_TICKET,MODE_TRADES)) Imprimir("Pedido aberto : ",OrderOpenPrice());

}

else Print("Erro na abertura do pedido de compra : ",GetLastError());

retornar(0);

}

if(isCrossed == 2)

{

2=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "My EA",12345,0,Red);

if(2>0)

{

if(OrderSelect(2,SELECT_BY_TICKET,MODE_TRADES)) Imprimir("Pedido de venda aberto : ",OrderOpenPrice());

}

else Print("Erro na abertura do pedido de VENDA : ",GetLastError());

retornar(0);

}

retorno(0);

}

}

eu tenho um erro dizendo 1 & 2 inesperado, o que isso significa? pode me guiar?

Obrigado

 

Acho que você apagou algo e esqueceu:

2=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"My EA",12345,0,Red); if(2>0)

é um disparate.

 
liew_stanley:
duplo externo TakeProfit=100;

Lotes duplos externos=1;

duplo externo TrailingStop=35;

eu tenho um erro dizendo 1 & 2 inesperado, o que isso significa? pode me guiar?

Obrigado

Delete 1=, and 2= before OrderSend(....

Razão: