Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 869
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Desculpe, é uma pena passar por cima da mesma coisa cem vezes.
Estou olhando como uma ovelha para o portão há quase um mês. Eu não entendo nada.
A tarefa é calcular uma média móvel menor, com uma média móvel de 13,
ou seja, para calcular um período de 12 com base em 13.
Olá! Um dos estimados gurus gostaria de verificar o início da minha primeira EA? É possível seguir em frente? Talvez eu tenha perdido alguma coisa? Eu ficaria muito grato por qualquer especificação. Vi em algum lugar no fórum como abrir apenas uma posição, mas não a copiei e agora não consigo encontrá-la. Ajude, por favor.
Obrigado!
// Versão de teste do Expert Advisor
//--------------------------------------------------------------------
//------Вводные данные:-----------------------------------------------------------
entrada duplo Lotes = 0,1; //Lote
input int MovingPeriod =5; // МА período de cálculo
input int MovingShift =0; // MA shift
input int Período InpBandsPeriod=10; // Período Bollinger Bands
input int InpBandsShift=0; // Mudança de banda de Bollinger
inputBandDeviations=2.0; // Desvio das Bandas de Bollinger
entrada no período K_Period=30; // %K período do estocástico
input int D_Period=10; // %D Período estocástico
input int Slowdawn =8; // Atraso estocástico
cor de entrada clMainStoch =Yellow; // cor da linha Stochastic principal
cor de entrada clSignalStoch =Red; // cor da linha de sinal estocástico
// -----Declare Global Variables:------------------------------------------
duplo MA_0, MA_1, MA_2; // valor MA em 0, 1 e 2 barras
duplo MB_0, MB_1, MB_2; // Valor do Bollinger médio em 0, 1 e 2 barras
duplo ExtUpperBuffer[]; // valor da linha superior do Bollinger
duplo ExtLowerBuffer[]; // Valor da linha inferior do Bollinger
duplo Delta_0, Delta_1; // diferença entre os valores de Bollinger superior e inferior ...
// ...Linhas de Bollinger em 0 e 1 barras
duplo Yellow_0, Yellow_1, Yellow_2; // valor PRINCIPAL em 0, 1 e 2 barras
duplo vermelho_0, vermelho_1, vermelho_2; // valor SIGNAL em 0, 1 e 2 barras
//-------Поехали!----------------------------------------------------------------
int start() //Special function start
{
//função chamada do indicador MA
MA_0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
MA_1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1);
MA_2=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2);
//feedback para a função Bollinger Bands
MB_0=iBand(NULL,0,InpBandPeriod,InpBandShift,InpBandDeviations,PRICE_CLOSE,0);
MB_1=iBand(NULL,0,InpBandPeriod,InpBandShift,InpBandDeviations,PRICE_CLOSE,1);
MB_2=iBand(NULL,0,InpBandPeriod,InpBandShift,InpBandDeviations,PRICE_CLOSE,2);
Delta_0=iBands(ExtUpperBuffer[0]-ExtLowerBuffer[0]));
Delta_1=iBands(ExtUpperBuffer[1]-ExtLowerBuffer[1]));
//Stochastic function call
Yellow_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,0)
Yellow_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,1);
Yellow_2=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,2);
Red_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,0)
Red_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,1);
Red_2=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,2);
//-------Ситуации по Стохастику:-----------------------------------------------------
// O mercado está sobre-comprado
duplo MOB()=(Yellow_0>=80 && Red_0>=80); // Variável local
// O mercado está sobre-vendido.
duplo MOS()=(Yellow_0<==20 && Red_0<==20); // Variável local
// O mercado é normal.
double MN()=(20<Yellow_0<80 && 20<Red_0<80); // Variável local
// situação crítica
double MC1()=(20<Yellow_0<80 && Red_0<==20); // Variável local
double MC2()=(20<Yellow_0<80 && Red_0>=80); // Variável local
double MC3()=(20<Red_0<80 && Yellow_0<==20); // Variável local
double MC4()=(20<Red_0<80 && Yellow_0>=80); // Variável local
//-------Example(my)order to open position-----------------------------------------------------
se (Delta_0 > Delta_1 && MOB()==verdadeiro) //O mercado está sobre-comprado mas o delta está em expansão
{ if (MB_2 > MB_1 && MB_1 < MB_0) //Lower Bollinger Break
PedidoEnviar(Símbolo(),OP_BUY,Lotes,Pedir,0,Bid-1500*Point,Bid+1500*Point);//abrir pedido de compra
Alerta("GetLastError()); //Mensagem de um erro
Alerta("Posição aberta BAY com lotes("Lotes"),preço("Perguntar")"); // Mensagem de compra
Além disso, as posições BAY (assim como Sell) podem ser abertas sob diferentes condições e, dependendo das condições sob as quais a posição foi aberta (por exemplo, BAY), haverá diferentes condições de fechamento. (por exemplo, BAY), haverá diferentes condições de fechamento.
Como faço para traduzir isto em MKL?
Além disso, as posições BAY (assim como Sell) podem ser abertas sob diferentes condições e, dependendo das condições sob as quais a posição foi aberta (por exemplo, BAY), haverá diferentes condições de fechamento. (por exemplo, BAY), haverá diferentes condições de fechamento.
Como faço para traduzir isto em MKL?
Selecionamos a ordem no laço. Se for uma compra e todos os outros dados (símbolo, mágico, o que quer que seja) atenderem ao critério de ter que fechá-la em "condições de fechamento adequadas", então a fechamos se houver "condições de fechamento adequadas".
É um pouco vago para mim, mas depois de algumas escavações, acho que vou entender. Muito obrigado por não se afastar ou dar lições dos picos de conhecimento, como alguns camaradas da União Soviética.
Eu descobri como fechar:
//-------Exemplo(meu) de uma ordem para abrir uma posição com um fechamento vinculante (por bilhete)-----------------------------------------------------
// Variável local que abre uma ordem BAY (ao invés da linha 63)
int Ticket_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point))
//-------Então, o fechamento para esta ordem específica poderia ser o seguinte: -----------------------------------------------------
se (Ticket_1()==verdadeiro) //se a ordem #1 foi aberta, então...
{ if (Yellow_0>Red_0 && (Yellow_0-Red_0)<(Yellow_1-Red_1)) //Yellow is higher than red, contraction(condition)
{ se (MA_2 < MA_1 && MA_1 > MA_0);} //Red acima da do meio(condição)
else (Yellow_0>Red_0 && (Yellow_0-Red_0)>(Yellow_1-Red_1)) //Yellow above red, expansão(condição)
{ if (MB_2 < MB_1 && MB_1 > MB_0);} / /Partida superior do Bollinger (condição)
bool Ans=OrderClose(Ticket,Lot,Bid,0); //...fechar ordem (lockvariável)
Alerta("Tentativa de fechar o pedido com Bid("Lots"),preço("Ask"). À espera de resposta...");
se (Ans===verdadeiro) // Funcionou :)
{
Alerta ("Pedido BAY fechado por lote ("Lotes"), Preço de fechamento ("Licitação");
pausa; // Sair do laço de fechamento da posição
}
}
Por favor, faça uma análise, bem no post anterior também. Desculpe por ser teimoso, mas veja - você é o único que responde... Obrigado!
É um pouco vago para mim, mas depois de algumas escavações, acho que vou entender. Muito obrigado por não virar as costas e dar lições do alto do conhecimento, como alguns camaradas do país soviético.
Pensei em fechá-lo desta forma:
...Por favor, faça uma análise, e no post anterior também. Desculpe a insistência, mas veja, você é o único que responde... Obrigado!
Bem, é um pouco obscuro, não é?
1. você tem que determinar o fato da ocorrência da condição para fechar o pedido
2. No ciclo, você revisa todas as posições em aberto e, quando encontrar a ordem de compra necessária, você a fecha.
Este é um exemplo de um ciclo:
Ou seja, para fechar o pedido de compra no símbolo atual (no gráfico onde o Expert Advisor está funcionando) e com um número mágico de 100500 (por exemplo), você deve chamar a função desta forma
Você não precisa escrever o número 100500, geralmente o número mágico já está definido na EA para uma variável, por exemplo int Magic = 100500; então você precisa escrever Magic ao invés de 100500
Eu não escrevi nada no laço onde a posição selecionada deveria ser fechada, pois deveria chamar a função para fechar a ordem de acordo com o bilhete. Geralmente é uma chamada de uma função completa com códigos de retorno do servidor comercial tratado. Você pode escrever ali um simples comando para fechar a ordem selecionada OrderClose() para verificar;
É muito mais fácil de ler dessa maneira. Desculpe.
Também é possível editar um posto antigo, para não criar duplicatas ;)
Ainda é possível editar um posto antigo para evitar duplicatas ;)
Está um pouco enevoado.
1) Determinar o fato de que a condição para fechar a ordem de compra tenha ocorrido
2. No loop, você revisa todas as posições em aberto e, quando encontrar a ordem de compra necessária, você a fecha.
Este é um exemplo de um ciclo:
Ou seja, para fechar o pedido de compra no símbolo atual (no gráfico onde o Expert Advisor está funcionando) e com um número mágico de 100500 (por exemplo), você deve chamar a função desta forma
Você não precisa escrever o número 100500, geralmente o número mágico já está definido na EA para uma variável, por exemplo int Magic = 100500; então você precisa escrever Magic ao invés de 100500
Eu não escrevi nada no laço onde a posição selecionada deveria ser fechada, pois deveria chamar a função para fechar a ordem de acordo com o bilhete. Geralmente é uma chamada de uma função completa com códigos de retorno do servidor comercial tratado. Você pode escrever ali um simples comando para fechar a ordem selecionada OrderClose() para verificar;