Como codificar? - página 257

 

Verifique as funções de tempo na ajuda do Metatrader. depois tente algo como isto

se (TimeHour(Time[0]) TradeHourStop)

{

Comentário ("Comércio suspenso - fora do horário comercial");

retorno(falso);

}

onde TimeHourStart e Stop são variáveis externas definidas por você. O retorno (falso); sairá da função de partida sem processamento adicional.

Boa Sorte,

 

Obrigado pela resposta rápida, Tzuman.

Infelizmente, minha programação do MT4 está limitada, no momento, a um construtor de EA online.

Mas isto é exatamente o que eu estava procurando!

 

Como codificar a configuração da cor do texto e o tamanho da fonte dos comentários.

Olá a todos,

Estou trabalhando em um EA e sou apenas um programador iniciante...

E tenho uma pergunta em geral sobre como codificar o tamanho da fonte e a cor do texto dos comentários e torná-lo configurável pelo usuário. Que variáveis externas eu tenho que criar? E como faço para programá-la?

Eu sei como usar a função de comentário, por exemplo, desta forma:

if(TextOnScreen == true) Comentário("Este texto aparece na tela");

Mas como programá-lo para que o usuário possa alterar o tamanho da fonte do texto que aparece na tela e também como alterar a cor do texto, alterando a configuração nas opções do EA?

Alguém pode me ajudar com algumas linhas de código? É muito apreciado.

Muito obrigado.

Johan

 
korthouj:
Olá a todos,

Estou trabalhando em um EA e sou apenas um programador iniciante...

E tenho uma pergunta em geral sobre como codificar o tamanho da fonte e a cor do texto dos comentários e torná-lo configurável pelo usuário. Que variáveis externas eu tenho que criar? E como faço para programá-la?

Eu sei como usar a função de comentário, por exemplo, desta forma:

if(TextOnScreen == true) Comentário("Este texto aparece na tela");

Mas como programá-lo para que o usuário possa alterar o tamanho da fonte do texto que aparece na tela e também como alterar a cor do texto, alterando a configuração nas opções do EA?

Alguém pode me ajudar com algumas linhas de código? É muito apreciado.

Muito obrigado.

Johan

Você precisa usar objetos gráficos como, por exemplo, rótulos. Como fazer isto - você pode ler facilmente no manual.

 
korthouj:
Olá a todos,

Estou trabalhando em um EA e sou apenas um programador iniciante...

E tenho uma pergunta em geral sobre como codificar o tamanho da fonte e a cor do texto dos comentários e torná-lo configurável pelo usuário. Que variáveis externas eu tenho que criar? E como faço para programá-la?

Eu sei como usar a função de comentário, por exemplo, desta forma:

if(TextOnScreen == true) Comentário("Este texto aparece na tela");

Mas como programá-lo para que o usuário possa alterar o tamanho da fonte do texto que aparece na tela e também como alterar a cor do texto, alterando a configuração nas opções do EA?

Alguém pode me ajudar com algumas linhas de código? É muito apreciado.

Muito obrigado.

Johan

Johan,

Estude o indicador anexo.

Parte do código é para quando um modelo é utilizado.

Descobri que a maneira mais difícil quando o texto de um par aparecia em outro gráfico de par por causa do modelo.

Se mais linhas de texto forem necessárias, você deve ser capaz de descobrir isso.

Se não postar novamente e eu mostrarei um exemplo com várias linhas.

Robert

Arquivos anexados:
 

por que ordem fechada falha e como limitar a ordem n.o.?

Eu sou um novato em MQL4, apenas testei um EA de mim mesmo, mas parece que não consegui fechar o pedido, e ele abriria o pedido em cada bar até que o freemargin se tornasse 0,então ele forçaria a parada de todos os pedidos. Eu não sei como limitar a ordem aberta NÃO. Quem poderia me dizer, TKS apreciava!

o código como se segue:

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

//| Moving Average.mq4 |

//| Copyright ?2005, MetaQuotes Software Corp. |

//| TeamWox Groupware / MetaQuotes Software Corp. |

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

#define MAGICMA 20110309

Lotes duplos externos = 1;

duplo externo MáximoRisco = 0,02;

duplo fator de redução externo = 10;

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

//| Calcular posições abertas |

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

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(vende);

}

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

//| Calcular o tamanho ideal do lote |

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

duplo LotsOptimized()

{

lote duplo=Lotes;

int orders=HistoryTotal(); // histórico total de ordens

int losses=0; // número de ordens de perdas sem intervalo

//---- selecione o tamanho do lote

lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100.0,1);

Print(MarketInfo(Symbol(), MODE_LOTSIZE));

Print(MarketInfo(Symbol(), MODE_MINLOT));

Print(MarketInfo(Symbol(), MODE_LOTSTEP)); Print(MarketInfo(Symbol(), MODE_LOTSTEP));

Print(MarketInfo(Symbol(), MODE_MAXLOT)); Print(MarketInfo(Symbol(), MODE_MAXLOT));

//---- calcular o número de ordens de perdas sem uma pausa

if(DiminaseFactor>0)

{

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==falso) { Print("Erro na história!"); break; }

if(OrderSymbol()!=Symbol() || OrderType()>OP_SELLL) continua;

//----

if(OrderProfit()>0) quebra;

if(OrderProfit()<0) perdas++;

}

if(perdas>1) lote=NormalizarDuplo(lote-lot*losses/DecreaseFactor,1);

//isso é um projeto técnico inteligente, mas as perdas representam lucros cessantes, não dinheiro pode causar problemas.

//modificá-los como:accountfreemargin()-orderprofit()

}

//---- tamanho do lote de retorno

if(lote<1) lote=1;

return(lot);

}

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

//| Verifique as condições de pedidos em aberto |

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

CheckForOpen()

{

duplo m1,m2,m3,m4,m4,ticket1,ticket2;

int res;

//---- go trading only for first tiks of new bar

if(Volume[0]>1) voltar;

//---- get Moving Average

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0);

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1);

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

se (m1<m3-0.0002)

{

ticket1=OrderSend(Symbol(),OP_SELLL,1,Bid,5,Ask+105*Point,0, "My order #1",MAGICMA,0,Red);

retornar;

}

se (m2<m4-0.0001)

{

ticket2=OrderSend(Symbol(),OP_SELLL,1,Bid,5,Ask+105*Point,0, "My order #2",MAGICMA,0,Yellow);

retornar;

}

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

se ( m1>m3+0.0002)

{

ticket1=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0, "My order #1",MAGICMA,0,Blue);

retornar;

}

se (m2>m4+0.0001)

{

ticket2=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0, "My order #2",MAGICMA,0,Green);

retornar;

}

//----

}

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

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

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

verificação nula CheckForClose()

{

duplo m1,m2,m3,m4;

//---- go trading only for first tiks of new bar

if(Volume[0]>1) voltar;

//---- get Moving Average

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0);

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1);

//----

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

{

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

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

//---- verificar tipo de pedido

if(OrderType()==OP_BUY)

{

if(m1<m3+0.0002)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

intervalo;

}

if(m2<m4+0.0001)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

break;

}

}

if(OrderType()==OP_SELL)

{

if(m1>m3-0.0002)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Tan);

intervalo;

}

if(m2<m4-0.0001)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Salmon);

intervalo;

}

}

}

//----

}

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

//| Função Start |

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

início nulo()

{

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

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

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

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

senão CheckForClose();

//----

}

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

 

Detectar versão Windows

Qualquer um agora tem uma maneira fácil de descobrir qual versão do windows MT4 está sendo executada usando apenas uma chamada API do windows.

Qualquer um pode me dizer como fazer isso funcionar:

#importar "kernel32.dll"

int GWINAPI GetVersionEA(_inout LPOSVERSIONINFO lpVersionInfo);

#importar

Função GetVersionEx (Windows)

Obrigado

 

Ajuda Necessária. Pequeno ajuste para minha CCI Divergence EA

Tenho uma CCI Divergence EA que usa um Indicador de Divergência de CCI personalizado na pasta Indicadores em MT4 para determinar quando colocar uma negociação.

O que eu quero fazer é usar um Indicador de Divergência Estocástica personalizado (que eu tenho) em seu lugar.

Não sei como mudar o código EA para direcioná-lo para o Indicador de Divergência Estocástica na pasta de indicadores.

Nas entradas da EA, acho que preciso substituir:

período CCI_Period = 10;

com

externo int Stoch_K = 5;

Exterior int Stoch_D = 3;

Exterior int Stoch_Slowing = 3;

Na parte principal do código, encontrei a área que aponta para o Indicador de Divergência CCI personalizado na pasta Indicadores:

dUp = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", false, false, false, 0, 2);

dDn = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, """, false, false, false, false, 1, 2);

Eu sei que tenho que mudar "CCI_Divergence_Indicator" para "Stochastics_Divergence_Indicator" que é o nome do indicador de divergência de stochastics personalizado na pasta Indicators. E eu tenho que remover o CCI_Period e 9.

Mas não sei como adicionar o Stoch_K, Stoch_D e Stoch_Slowing a esta porção do código.

Tentei mudá-lo por conta própria, mas depois o EA não abre.

Alguém sabe como codificar esta porção do código para que o indicador de divergência estocástica possa substituir o indicador de divergência cci?

Paguei a um programador para criar a EA, mas ele está muito ocupado com outros projetos de clientes. Portanto, quando se trata de pequenas mudanças/fixações, ele não tem tempo para fazer isso por mim - pelo menos não imediatamente. Por isso, é por isso que estou perguntando aqui.

O Indicador de Divergência da CCI tem demasiados sinais falsos. O Indicador de Divergência Estocástica é muito melhor. É por isso que eu quero fazer a troca.

Obrigado de antemão.

 

Ajuda Por favor

Tenho uma linha de código que me alertará quando o preço de 1 bar(seja 1m 5m 189m)mover 200 pips IN 1 BAR. mas não consigo, por toda a minha vida, descobrir como alertá-lo SOMENTE para uma direção específica. aqui está...

if(High[0]-Low[0]>200*Point)PlaySound("Alert.wav"); // Isto funciona bem.

Mas eu quero poder distinguir entre 200 pip UP e 200 pip DOWN. Eu li, perguntei em fóruns, estive em salas de bate-papo e fiquei louco por 3 dias. im por favor, pelo amor de deus me ajude

 
if(High[0]-Low[0]>200*Point && Close[0]>Open[0])PlaySound("Up.wav");

if(High[0]-Low[0]>200*Point && Close[0]<Open[0])PlaySound("Down.wav");[/CODE]

Actually, you should rather look at highs and lows of two last bars and compare close to close, to ensure gaps are included, too:

[CODE]if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]>Close[1])PlaySound("Up.wav");

if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]<Close[1])PlaySound("Down.wav");