Ajuda na codificação - página 19

 

completei minha EA com a nossa ajuda ThanX novamente

Olá, mLaden,

Que X novamente por nossa grande ajuda

completei minha EA com a nossa ajuda ThanX novamente

Do queXXXXXXXXXXXX

 

Indicadores de reimpressão

Eu postei esta pergunta para este tópico "Coding Help" há algumas semanas, mas não obtive resposta.

A maioria dos indicadores MTF repintam, alguns mais do que outros. Tenho um que pinta ligeiramente, mas tem um fator que é muito bom e que poderia ser incluído em um método. O problema é que eu preciso atualizar/refazer manualmente constantemente para que isso faça sentido. Existe uma maneira de codificar uma atualização automática a cada tick ou a cada 'x' segundos/ticks?

Atualmente, para atualizar, ou mudo o tempo do gráfico e depois volto, ou vou para a guia Gráficos/Refresh, ou adiciono outro indicador ao gráfico e excluo o anterior....... vezes sem conta! Muito demorado!

Se houver uma maneira de fazer esta atualização automática, eu vou compartilhar o que encontrei............

Thx,

el abelha

 

...

el abelha

Metatrader está enviando um sinal de autorefresh para cada um dos indicadores na janela quando um novo tick chega, portanto não é um problema de refrescamento. Normalmente esse tipo de problema acontece quando um indicador não encontra a contagem de barras trocadas (normalmente nomeada nos indicadores como "limite") corretamente ... então é um problema para o indicador. Quando você muda os prazos, ele recalcula todas as barras novamente e é por isso que ele o mostra corretamente nesse caso e não o faz corretamente quando há apenas 1 barra alterada

Para concluir: verifique o código do indicador - ele tem um bug

el bee:
Eu postei esta pergunta para este tópico "Coding Help" há algumas semanas, mas não obtive resposta.

A maioria dos indicadores MTF repintam, alguns mais do que outros. Eu tenho um que pinta ligeiramente, mas tem um fator que é muito bom e que poderia ser incluído em um método. O problema é que eu preciso atualizar/refazer manualmente constantemente para que isso faça sentido. Existe uma maneira de codificar uma atualização automática a cada tick ou a cada 'x' segundos/ticks?

Atualmente, para atualizar, ou mudo o tempo do gráfico e depois volto, ou vou para a guia Gráficos/Refresh, ou adiciono outro indicador ao gráfico e excluo o anterior....... vezes sem conta! Muito demorado!

Se houver uma maneira de fazer esta atualização automática, eu vou compartilhar o que encontrei............

Thx,

el abelha
 

ajuda indicadora

Eu poderia usar um indicador que colocasse uma linha vertical na vela mais recente, adjuvante, se alguém tem uma e pode compartilhar ou se uma poderia ser feita, seria mais apreciada

 

Existe um código errado ?

Estou tentando escrever um EA que se baseie em abrir e fechar a barra

mas tenho um problema com as condições para abrir um comércio .

meu método é algo parecido com isso :

+ VENDA quando a abertura da barra atual é maior do que o fechamento da barra anterior . TP é o fechamento da barra anterior

+ COMPRAR quando a abertura da barra atual é menor que a abertura da barra anterior . TP está aberta da barra anterior

+ FECHAR quando a barra atual fecha .

e aqui está o código (ainda estou tentando aprender mql4 , então sei que não é o melhor código)

#property link "sando"

#define MAGICMA 20050610

//====================parameter===================//

duplo solantang externo =3;

duplo solantângio externo =3;

duplo solantang externo =1;

//==============================================//

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

//| verificar se há comércio aberto |

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

int CalculateCurrentOrders(símbolo de corda)

{

int compra=0,vende=0;

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==falso) break;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) compra++;

if(OrderType()==OP_SELL) vende++;

}

}

//---- volume de pedidos de devolução

if(compra>0) return(compra);

caso contrário, retorna(-sells);

}

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

//| Moneymanagement (Tipo 3) |

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

duplo gerenciamento de dinheiro3()

{

tamanho duplo LotsSize = 0,1;

if(OrdensHistóriaTotal()>0)

{

OrderSelect(OrderHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);

if(OrderProfit() > 0)

{

if(OrderLots() > LotsSize)

{

LotsSize = OrderLots()/solangiam;

}

senão

{

LotsSize = Tamanho do LotsSize;

}

}

senão

{

LotsSize = OrderLots() * solantang;

}

}

retorno (NormalizeDouble(LotsSize,2));

}

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

//| CONDIÇÃO de abrir um comércio |

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

opentrada vazia()

{

int res;

if(Close[0]<Open[1])

{

res=OrderSend(Symbol(),OP_SELL,moneymanagement3(),Bid,3,Close[0],Close[1],"",MAGICMA,0,Red);

retornar;

}

if(Open[0]>Open[1])

{

res=OrderSend(Symbol(),OP_BUY,moneymanagement3(),Ask,3,Open[0],Close[1],"",MAGICMA,0,Blue);

retornar;

}

}

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

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

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

início nulo()

{

//---- verificação de histórico e comércio

if(Bars<100 || IsTradeAllowed()==falso) retorna;

//---- calcular ordens abertas pelo símbolo atual

if(CalculateCurrentOrders(Symbol())==0) opentrade();

// else donggiaodich();

//----

}

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

e, por favor, verifique a foto em anexo

Eu acho que algo está errado no código

algum dia a EA não faz o comércio quando cumpre a condição T_T Não sei por que

e, às vezes, a EA faz o comércio quando não cumpre a condição!

Por favor, ajude-me a corrigir o erro no código .

Arquivos anexados:
1_2.gif  12 kb
new_edge.mq4  4 kb
 
7thman:
Estou tentando escrever uma EA que se baseie em abrir e fechar o bar

mas tenho um problema com as condições para abrir um comércio .

meu método é algo parecido com isso :

+ VENDA quando a abertura da barra atual é maior do que o fechamento da barra anterior . TP é o fechamento da barra anterior

+ COMPRAR quando a abertura da barra atual é menor que a abertura da barra anterior . TP está aberta da barra anterior

+ FECHAR quando a barra atual fecha .

e aqui está o código (ainda estou tentando aprender mql4 , então sei que não é o melhor código)

e, por favor, verifique a foto em anexo

Eu acho que algo está errado no código

algum dia a EA não faz o comércio quando cumpre a condição T_T Não sei por que

e, às vezes, a EA faz o comércio quando não cumpre a condição!

Por favor, ajude-me a corrigir o erro no código .

[lang=pl]+ SELL quando a abertura da barra atual é maior do que o fechamento da barra anterior . TP é o fechamento da barra anterior

+ COMPRAR quando a abertura da barra atual é menor que a abertura da barra anterior . TP está aberta da barra anterior

Aqui está o primeiro erro:

if(Fechar[0]Fechar[1])

if(Open[0]>Open[1]) (Deve ser Open[0]<Open[1])

O segundo é o StopLoss. Em seu código, você define StopLoss, mas na descrição acima

você disse que quer fechar negócios se surgir um novo bar.

Aqui está mais um problema. Suponha que Abra[0]<Abrir[1]. A diferença pode ser tão pequena

que quando seu pedido for executado o preço estará aberto[1] e TP

menos do que o preço aberto do pedido . Abaixo acrescento a condição que permite apanhar este caso.

Se eu bem entendo que você quer fechar todos os pedidos no final da barra aqui é código.

#link de propriedade "sando"

#define MAGICMA 20050610

//====================parameter===================//

duplo solantang externo =3;

duplo solantângio externo =3;

duplo solantang externo =1;

//==============================================//

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

//| verificar se há comércio aberto |

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

int CalculateCurrentOrders(símbolo de corda)

{

int compra=0,vende=0;

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false ) break;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) compra++;

if(OrderType()==OP_SELL) vende++;

}

}

//---- volume de pedidos de devolução

if(compra>0) return(compra);

caso contrário, retorna(-sells);

}

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

//| Moneymanagement (Tipo 3) |

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

duplo gerenciamento de dinheiro3()

{

tamanho duplo LotsSize = 0,1;

if(OrdensHistóriaTotal()>0)

{

OrderSelect(OrderHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);

if(OrderProfit() > 0)

{

if(OrderLots() > LotsSize)

{

LotsSize = OrderLots()/solangiam;

}

senão

{

LotsSize = Tamanho do LotsSize;

}

}

senão

{

LotsSize = OrderLots() * solantang;

}

}

retorno (NormalizeDouble(LotsSize,2));

}

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

//| CONDIÇÃO de abrir um comércio |

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

opentrada vazia()

{

int res;

se(Fechar[1] Fechar[1] )

{

res=OrderSend(Symbol(),OP_SELL,moneymanagement3(), Bid,3,0,Close[1],"",MAGICMA,0,Red);

retornar;

}

if(Open[0]<Open[1] && Ask <Aber[1])

{

res=OrderSend(Symbol(),OP_BUY,moneymanagement3(),Ask,3,0,Open[1],"",MAGICMA,0,Blue);

retornar;

}

}

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

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

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

início nulo()

{

if(isNewBar())

{

closeOrders(MAGICMA,OP_BUY);

closeOrders(MAGICMA,OP_SELL);

}

Print(Close[1]-Open[0]);

//---- verificação de histórico e comércio

if(Bars<100 || IsTradeAllowed()==falso) retorna;

//---- calcular ordens abertas pelo símbolo atual

if(CalculateCurrentOrders(Symbol())==0) opentrade();

// else donggiaodich();

//----

}

Encomendas nulas (int oMagic,int oType) {

for(int i=0;i<OrdersTotal();i++) {

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic || oMagic<0) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

if(OrderType()==OP_BUY) {

OrderClose(OrderTicket(),OrderLots(),Bid,0);

i--;

}

se (OrderType() == OP_BUYSTOP)

{

OrderDelete(OrderTicket());

i--;

}

if(OrderType()==OP_SELL) {

OrderClose(OrderTicket(),OrderLots(),Ask,0);

i--;

}

se (OrderType() == OP_SELLSTOP)

{

OrderDelete(OrderTicket());

i--;

}

}

}

}

}

}

}

bool isNewBar() {

estática no tempo;

bool newBar=false;

if(Time[0]!=prevTime) {

newBar=verdadeiro;

prevTime=Time[0];

}

return(newBar);

}

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

Abraço,

Grzesiek[/lang]

 

Ajuda na codificação: Colocação de Stop Loss & Take Profit com EA usando um corretor ECN

Pare de Perda, Lucre com ECN Broker

Amigos,

Sou um novato na programação da MQL4 e preciso de ajuda para anexar um SL & TP a um ORDERSEND com um corretor ECN.

Inicialmente, eu não conseguia entender porque os SL & TPs estavam fazendo meu pedido resultar em um erro até que alguém apontou que alguém tem que definir o campo StopLoss & TakeProfit dentro do ORDERSEND para "0" ou então um corretor ECN/STP não executará o pedido.

Portanto, minha pergunta é: Como posso executar uma ordem no Mercado e depois imediatamente (ou dentro de um ou dois segundos) anexar um SL/TP a esse bilhete?

Aqui está um trecho do código pertinente à minha pergunta:

if(Preço atualComprador>Aparafusador de Preço Superior)

{

OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,0,Co mm,0,0,0,CLR_NONE);

}

Qualquer pessoa pode me ajudar a inserir o código logo após o comando OrderSend para que eu possa anexar um TP/SL de 25pips, digamos arbitrariamente, a esse ticket específico?

Qualquer ajuda seria muito apreciada. Agradecemos antecipadamente.

Saudações,

Kasio

 
kasio:
Pare de Perda, Lucre com ECN Broker

Amigos,

Sou um novato na programação da MQL4 e preciso de ajuda para anexar um SL & TP a um ORDERSEND com um corretor ECN.

Inicialmente, eu não conseguia entender porque os SL & TPs estavam fazendo meu pedido resultar em um erro até que alguém apontou que alguém tem que definir o campo StopLoss & TakeProfit dentro do ORDERSEND para "0" ou então um corretor ECN/STP não executará o pedido.

Portanto, minha pergunta é: Como posso executar uma ordem no Mercado e depois imediatamente (ou dentro de um ou dois segundos) anexar um SL/TP a esse bilhete?

Aqui está um trecho do código pertinente à minha pergunta:

if(Preço atualComprador>Aparafusador de Preço Superior)

{

OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,0,Co mm,0,0,0,CLR_NONE);

}

Qualquer pessoa pode me ajudar a inserir o código logo após o comando OrderSend para que eu possa anexar um TP/SL de 25pips, digamos arbitrariamente, a esse bilhete específico?

Qualquer ajuda seria muito apreciada. Agradecemos antecipadamente.

Cumprimentos,

Kasio

Oi kasio,

Se você comercializa com corretor ECN, você deve enviar um pedido sem SL/TP e modificá-lo.

aqui está um exemplo:

stopLoss duplo externo = 25;

TakeProfit duplo externo = 25;

if(isECN===verdadeiro )

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - StopLoss*Point, StopLoss),sltpValue(Ask+ TakeProfit*Point,TakeProfit),0);

}

duplo sltpValue(duplo w1, int w2)

{

if(w2 == 0)

retorno (0);

retorno (NormalizeDuplo(w1, Dígitos));

}

Espero que seja claro

Me pergunte se tiver mais perguntas.

saúde,

grzesiek

 

Informações não atualizadas a cada tique

Oi, pessoal,

Escrevi esta ea que me mostra informações sobre vários indicadores em minha tela.

Entretanto, quando eu anexar a ea ao meu gráfico, a informação só será atualizada a cada 5 minutos (no gráfico de 5 minutos),

em vez de cada tique. Há algo errado em minha codificação? Eu gostaria de ver as informações para mudar cada tique.

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

//| test.mq4 |

//| Copyright © 2011, Test Inc. |

//| test.net - Recursos e informações de teste. |

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

#direitos de propriedade intelectual "Copyright © 2011, Test Inc."

#link da propriedade "http://www.test.net"

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

//| etiquetas |

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

#define ccilabel "CCIValue"

#define rsilabel "RSIValue

#define stochlabel "StochValue

#define upperbandlabel "UpperBandValue"

#define lowerbandlabel "LowerBandValue"

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

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

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

int init()

{

//----

//----

retorno(0);

}

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

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

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

int deinit()

{

//----

//----

retorno(0);

}

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

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

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

int start()

{

//----

//===================================================================

// Índice de Força Relativa Dinâmica berekenen

//===================================================================

RSI duplo;

banda dupla UpperBand;

banda inferior dupla;

RSI=iCustom(NULL,0, "Dynamic Zone RSI",14,0,1);

UpperBand=iCustom(NULL,0, "Dynamic Zone RSI",14,1,1);

LowerBand=iCustom(NULL,0, "Dynamic Zone RSI",14,2,1); LowerBand=iCustom(NULL,0, "Dynamic Zone RSI",14,2,1);

//===================================================================

// CCI berekenen

//===================================================================

CCI dupla;

CCI=iCCI(NULL,0,14,PRICE_TYPICAL,1);

//===================================================================

// Estocástico berekenen

//===================================================================

duplo Stoch;

Stoch=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);

//===================================================================

// Exibir informações

//===================================================================

// CCIValue

ObjectDelete(ccilabel);

ObjectCreate(ccilabel, OBJ_LABEL, 0, 0, 0, 0);

ObjectSet(ccilabel, OBJPROP_XDISTANCE, 20);

ObjectSet(ccilabel, OBJPROP_YDISTANCE, 20);

ObjectSetText(ccilabel, "CCIValue is " + DoubleToStr(CCI,2), 10, "Arial", DeepSkyBlue);

// StochValue

ObjectDelete(stochlabel);

ObjectCreate(stochlabel, OBJ_LABEL, 0, 0, 0, 0);

ObjectSet(stochlabel, OBJPROP_XDISTANCE, 20);

ObjectSet(stochlabel, OBJPROP_YDISTANCE, 40);

ObjectSetText(stochlabel, "StochValue is " + DoubleToStr(Stoch,2), 10, "Arial", DeepSkyBlue);

// RSIValue

ObjectDelete(rsilabel);

ObjectCreate(rsilabel, OBJ_LABEL, 0, 0, 0, 0);

ObjectSet(rsilabel, OBJPROP_XDISTANCE, 20);

ObjectSet(rsilabel, OBJPROP_YDISTANCE, 60);

ObjectSetText(rsilabel, "RSIValue is " + DoubleToStr(RSI,2), 10, "Arial", DeepSkyBlue);

// UpperBandValue

ObjectDelete(rótulo superior);

ObjectCreate(upperbandlabel, OBJ_LABEL, 0, 0, 0, 0);

ObjectSet(upperbandlabel, OBJPROP_XDISTANCE, 20);

ObjectSet(upperbandlabel, OBJPROP_YDISTANCE, 80);

ObjectSetText(upperbandlabel, "UpperbandValue is " + DoubleToStr(UpperBand,2), 10, "Arial", DeepSkyBlue);

// Valor LowerBandValue

ObjectDelete(lowerbandlabel);

ObjectCreate(lowerbandlabel, OBJ_LABEL, 0, 0, 0, 0);

ObjectSet(lowerbandlabel, OBJPROP_XDISTANCE, 20);

ObjectSet(lowerbandlabel, OBJPROP_YDISTANCE, 100);

ObjectSetText(lowerbandlabel, "LowerBandValue is " + DoubleToStr(LowerBand,2), 10, "Arial", DeepSkyBlue);

//----

retorno(0);

}

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

 

KG Suporte e Resistência mod

Olá,

Preciso de alguém para modificar um dos indicadores de apoio e resistência anexos. O primeiro tem um alerta quando uma fuga é feita. Este indicador é um dos melhores indicadores de suporte/resistência e também muito poderoso, especialmente em prazos mais altos.

Obrigado

kg_support_and_resistance.mq4 ou

kg_support_and_resistance_alert_revision_2.ex4

Razão: