[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 347
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Por favor, ajude-me a melhorar este código para obter um simples Expert Advisor. A essência é simples: abrimos 2 posições Sell e Bui com paradas especificadas ao preço atual. Então, quando um ou ambos acionam, abrimos novas posições. A essência parece simples, mas ainda não funciona Muito obrigado!
//+------------------------------------------------------------------+
//| 2DiffOrders.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
extern double lots=0.01;
extern int SL_in_pips;
extern int TP_in_pips;
int x2;
int init()
{
if(SL_in_pips<=MarketInfo(Symbol(),MODE_STOPLEVEL) && SL_in_pips>0)
{
SL_in_pips=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert("Stoploss установлен слишком близко к цене открытия. Должен быть минимум ",MarketInfo(Symbol(),MODE_STOPLEVEL),"pt.");
}
if(TP_in_pips<=MarketInfo(Symbol(),MODE_STOPLEVEL) && TP_in_pips>0)
{
TP_in_pips=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert("Takeprofit установлен слишком близко к цене открытия. Должен быть минимум ",MarketInfo(Symbol(),MODE_STOPLEVEL),"pt.");
}
x2=1;
while(x2!=0)
{
if(OrderSend(Symbol(),0,lots,Ask,2,Bid-15*Point,Bid+15*Point,0)!=-1)
{
Alert("Ордер типа BUY успешно открыт");
OrderSend(Symbol(),1,lots,Bid,2,Ask+15*Point,Ask-15*Point,0);
x2=GetLastError();
if(x2==0)
Alert("Ордер типа SELL успешно открыт");
if(x2!=0)
Alert("Ордер типа SELL не открыт. Ошибка №: ",x2);
}else
{
x2=GetLastError();
if(x2!=0)
Alert("Ордер типа BUY не открыт. Ошибка №: ",x2);
}
}
//----
return(0);
Isto só parece estar exatamente certo, mas em vista da máquina, a última parte pode assumir valores diferentes. I.e. 2.9999, 3 ou 3.00000001
Para se livrar de tais mal-entendidos, existe a função NormalizeDouble() na MQL.
Sim, a NormalizeDouble() ajuda, obrigado.
Mas ainda não está claro como isto é possível, parece ser uma divisão simples, e se você dividir 0,5 ou 0,9 ou mesmo 0,31 por 0,1, tudo está bem.
e aqui ele tem claramente 2,9, não está claro... a calculadora é mais precisa :-)
Graças a Reshetov e splxgf por sua ajuda.
Mas ainda não está claro como é possível, parece ser uma divisão simples. E se você dividir 0,5 ou 0,9 ou mesmo 0,31 por 0,1, tudo bem.
e aqui é 2,9, não está claro... a calculadora é mais precisa :-)
As calculadoras têm funções de arredondamento incorporadas. E resolvem da mesma forma porque usam o mesmo coprocessador matemático para calcular números de ponto flutuante.
Olá!
Você pode me dar uma dica?!!!
Eu mesmo não entendo como fazer isso.
Tarefa:
A EA coloca 1-2 pedidos uma vez por dia.
O valor inicial da variável é definido manualmente e pode tomar um valor de 1 a 10.
Você precisa alterar a variável previamente definida em incrementos de 1 para um valor de - 10
em cada dia útil da EA, somente por 1, se nesse dia a TP não for executada.
Quando o TP é executado, a variável retorna valor - 1.
A contagem SL não é adequada, pois pode ser uma ou duas, e o valor só pode ser alterado uma vez por dia.
Isto é
Variável = 1
Dia 1 SL - variável =2
Dia 2 SL - variável =3
Dia 3 SL - variável =4
Dia 4 TP - variável =1
Dia 5 SL - variável =2
... E assim por diante.
Socorro!
Obrigado.
Por favor, ajude-me a melhorar este código para obter um simples Expert Advisor. A idéia é simples: abrimos 2 posições Sell e Bui com paradas especificadas ao preço atual. Então, quando um ou ambos acionam, abrimos novas posições. A essência parece simples, mas ainda não funciona Muito obrigado!
Connoisseurs, por favor, ajudem.
Há um código que calcula um único momento de período e o integra com um grande período, depois o produz como um indicador.
Preciso escrever um indicador com um determinado período que encontre a média da curva resultante e a produza como um indicador.
O código está anexado:
#janela_indicadora de propriedade_separarate_window
#property indicator_buffers 1
#indicador de propriedade_color1 DodgerBlue
#largura_do_indicador de propriedade1 2
//------- Parâmetros indicadores externos ----------------------------------------+
período MTM_Exterior = 1;
//externo int MTM_Integr_Period = 1000;
// Preço_externo aplicado_preço = 0; // Preço usado:
// 0 - PREÇO_FECHAR
// 1 - PRICE_OPEN
// 2 - PREÇO_ELEVADO
// 3 - PREÇO_BAIXO
// 4 - PRICE_MEDIAN
// 5 - PRICE_TYPICAL
// 6 - PREÇO_PONDERADO
NúmeroOfBars externo = 1000; // Número de barras (0-all)
//------- Buffers indicadores ---------------------------------------------------+
duplo buf0[];
//+----------------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+----------------------------------------------------------------------------+
init() {
SetIndexBuffer (0, buf0);
SetIndexEmptyValue(0, 0);
SetIndexLabel (0, "i-mtm_integr");
SetIndexStyle (0, DRAW_LINE);
}
//+----------------------------------------------------------------------------+
//| Função de desinicialização de indicador personalizada |
//+----------------------------------------------------------------------------+
void deinit() {
Comentário(");
}
//+----------------------------------------------------------------------------+
//| Função de iteração de indicador personalizada |
//+----------------------------------------------------------------------------+
início nulo() {
int LoopBegin, i,j, per=3;
mtm duplo, mtmsum;
se (NumberOfBars==0) LoopBegin=Bars-1;
else LoopBegin=NumberOfBars;
LoopBegin=MathMin(LoopBegin, Bars-1);
para (i=LoopBegin; i>=0; i--) {
mtm=Fechar[i]-Fechar[MTM_Period+i];
mtmsum=mtmsum+mtm;
buf0[i]=mtmsum;
}
/* para (i=LoopBegin-per;i>=per;i--){
mtm=Fechar[i]-Fechar[MTM_Period+i];
mtmsum[i]=0+mtm;
para (j=per;j<=0;j--){
mtmsum[i]=0+mtmsum[i+j];
mtmsum[i]=mtmsum[i]/per;
buf0[i]=mtmsum[i];
}
}*/
}
//+----------------------------------------------------------------------------+
Connoisseurs, por favor, ajudem.
Há um código que calcula um único momento de período e o integra com um grande período, depois o produz como um indicador.
Preciso escrever um indicador com um determinado período que encontre a média da curva resultante e a produza como um indicador.
Isto só parece estar exatamente certo, mas em vista da máquina, a última parte pode assumir valores diferentes. I.e. 2.9999, 3 ou 3.00000001
Para se livrar de tais mal-entendidos, a MQL tem a função NormalizeDouble()
Por que a função NormalizeDouble() não é executada por padrão para todos os valores de Ask, Bid, Low, etc.?
Todos caíram nessa e depois têm que consertá-la "manualmente". Estranho que a MT não consiga ler o que ela mesma desovou.
Obrigado, há alguma garantia de que os dados estarão disponíveis no início()?
você pode tentar usar o RefreshRates() - veja exemplos na ajuda padrão do MetaEditor
Há uma opção "Salvar como relatório" na otimização da EA, mas os "Parâmetros de entrada" não são mostrados no explorador da Internet,
embora, a julgar pelo código html, eles estejam presentes ali. Em geral, foi por causa desses parâmetros que a otimização foi iniciada.
Talvez alguém saiba como vê-los no Explorer?
(Há também a possibilidade de copiá-los para arquivo de texto por comando separado, mas é preferível vê-los no IE)