[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 910
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
Victor, dê uma olhada em sua mensagem pessoal, por favor.
Viu-o
OrderSend() é acionado a cada tique (como eu o entendo). Para eliminar o problema, coloque uma variável antes da função de início, por exemplo, em H=0.
Mais adiante, o código:
..........
se ( H==0)
{
OrderSend(blá blá blá blá);
}
H=1;
E não há necessidade de álgebra. E OrderTotal() é melhor não ser usado para limitar.
Entendo, funciona para mim, tenho que abrir uma ordem e não abre no próximo tick.
A segunda ordem, a segunda ordem é necessária somente quando a primeira fecha
Se não estou enganado, deve ser assim...
int H=0;
int F=OrdensTotal();
..........
if(F<1)
{
se ( H==0)
{
OrderSend(blá blá blá blá);
}
H=1;}
Se não estou enganado, deve ser assim...
int H=0;
int F=OrdensTotal();
..........
if(F<1)
{
se ( H==0)
{
OrderSend(blá blá blá blá);
}
H=1;}
é compreensível, tudo funciona para mim, quero dizer 1 ordem para ser aberta e não para abrir no próximo tick
a segunda ordem, a segunda ordem só é necessária quando a primeira fecha
Boa tarde a todos. Não sou muito bom em escrever EAs, tentei aprender estas coisas, mas comecei agora mesmo e é bastante difícil para mim. Quero escrever um EA que abra negócios quando os preços cruzarem uma média móvel e os feche na travessia oposta, seja usando stop loss ou trailing stop. Encontrei um exemplo de uma EA desse tipo, mas não há nenhuma parada de trilha ou parada de perda e as negociações são abertas e fechadas simplesmente na travessia. Eu não tenho conhecimento suficiente para isso. Quero pedir a alguém que me ajude onde colocar um ponto de parada e parada e como fazer com que isso funcione:
#propriedade copyright "Jake Sunders
#link do proprietário "feloq@mail.ru
#define STATE_SQUARE 0
#define STATE_LONG 1
#define STATE_SHORT 2
//---- parâmetros de entrada
período MAP MAP = 26;
Lotes externos duplosNúmero=1,0;
TrailingStop duplo externo=50;
StopLoss duplo externo= 50;
//---- variáveis globais
estado atual;
int MyOrderTicket;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
if (iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0) > Close[0])
Estado atual = STATE_SHORT;
else CurrentState = STATE_LONG;
MyOrderTicket = 0;
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização de especialistas |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
//----
int err;
duplo MA;
MA = iMA(NULL, 0, MAPÉREO, 0, MODE_EMA, PRICE_CLOSE, 0);
se ( CurrentState == STATE_LONG)
{
se (MA > Fechar[1]) // a média móvel for maior que o preço fechado
{
Estado atual = STATE_SHORT;
//volta para vender
//--fechar posição se aberto
se ( MyOrderTicket != 0)
{
se (!OrderClose(MyOrderTicket, LotsNumber, Bid, 3, CLR_NONE))
{
err = GetLastError();
Imprimir("Erro ao fechar a posição: ", err);
retorno(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- posição longa foi fechada com sucesso
//--- agora vamos abrir uma posição de venda
//--- verificar se há fundos livres
MyOrderTicket = OrderSend(Symbol(), OP_SELL, LotsNumber, Bid, 3, 0, 0, 0,
NULO, 0, 0, CLR_NONE);
se (MyOrderTicket<0)
{
err = GetLastError();
Imprimir("Erro na abertura da posição: ", err);
MyOrderTicket = 0;
}
}
}
senão
{
se (MA < Fechar[1]) // média móvel abaixo do preço de fechamento
{
Estado atual = STATE_LONG;
//reverso para comprar
//--fechar posição se aberto
se ( MyOrderTicket != 0)
{
se (!OrderClose(MyOrderTicket, LotsNumber, Ask, 3, CLR_NONE))
{
err = GetLastError();
Imprimir("Erro ao fechar a posição: ", err);
retorno(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- a posição curta foi fechada com sucesso
//--- agora vamos abrir uma posição de compra
//--- verificar se há fundos livres
MyOrderTicket = OrderSend(Symbol(), OP_BUY, LotsNumber, Ask, 3, 0, 0, 0,
NULO, 0, 0, CLR_NONE);
se (MyOrderTicket<0)
{
err = GetLastError();
Imprimir("Erro na abertura da posição: ", err);
MyOrderTicket = 0;
}
}
}
//----
retorno(0);
}
Pessoal, por favor, avisem! Como faço para abrir e fechar uma posição quando uma vela ou candelabros expiram? Ou seja, abre na abertura de um novo castiçal e fecha
Como eu assumo os valores indicadores no fechamento de um castiçal?
Tenho ordens de compra e venda que abrem pelo mesmo preço para quase 50-100 posições,
como devo fazer apenas um pedido aberto, se não estou enganado - OrderTotal()
Se sim, como devo usá-la e onde devo colocá-la? Sinto que sem esta função preciso inserir toda a álgebra
Condições erradas para fazer negócios, ver exemplo de dois MAs.
Boa tarde a todos. Não sou muito bom em escrever EAs, tentei aprender estas coisas, mas comecei agora mesmo e é bastante difícil para mim. Quero escrever um EA que abra negócios quando os preços cruzarem uma média móvel e os feche na travessia oposta, seja usando stop loss ou trailing stop. Encontrei um exemplo de uma EA desse tipo, mas não há nenhuma parada de trilha ou parada de perda e as negociações são abertas e fechadas simplesmente na travessia. Eu não tenho conhecimento suficiente para isso. Quero pedir a alguém que me ajude onde colocar um ponto de parada e parada e como fazer com que isso funcione:
#propriedade copyright "Jake Sunders
#link do proprietário "feloq@mail.ru
#define STATE_SQUARE 0
#define STATE_LONG 1
#define STATE_SHORT 2
//---- parâmetros de entrada
período MAP MAP = 26;
Lotes externos duplosNúmero=1,0;
TrailingStop duplo externo=50;
StopLoss duplo externo= 50;
//---- variáveis globais
estado atual;
int MyOrderTicket;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
if (iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0) > Close[0])
Estado atual = STATE_SHORT;
else CurrentState = STATE_LONG;
MyOrderTicket = 0;
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização de especialistas |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
//----
int err;
duplo MA;
MA = iMA(NULL, 0, MAPÉREO, 0, MODE_EMA, PRICE_CLOSE, 0);
se ( CurrentState == STATE_LONG)
{
se (MA > Fechar[1]) // a média móvel for maior que o preço fechado
{
Estado atual = STATE_SHORT;
//volta para vender
//--fechar posição se aberto
se ( MyOrderTicket != 0)
{
se (!OrderClose(MyOrderTicket, LotsNumber, Bid, 3, CLR_NONE))
{
err = GetLastError();
Imprimir("Erro ao fechar a posição: ", err);
retorno(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- posição longa foi fechada com sucesso
//--- agora vamos abrir uma posição de venda
//--- verificar se há fundos livres
MyOrderTicket = OrderSend(Symbol(), OP_SELL, LotsNumber, Bid, 3, 0, 0, 0,
NULO, 0, 0, CLR_NONE);
se (MyOrderTicket<0)
{
err = GetLastError();
Imprimir("Erro na abertura da posição: ", err);
MyOrderTicket = 0;
}
}
}
senão
{
se (MA < Fechar[1]) // média móvel abaixo do preço de fechamento
{
Estado atual = STATE_LONG;
//reverso para comprar
//--fechar posição se aberto
se ( MyOrderTicket != 0)
{
se (!OrderClose(MyOrderTicket, LotsNumber, Ask, 3, CLR_NONE))
{
err = GetLastError();
Imprimir("Erro ao fechar a posição: ", err);
retorno(0);
}
MyOrderTicket = 0;
}
RefreshRates();
//--- a posição curta foi fechada com sucesso
//--- agora vamos abrir uma posição de compra
//--- verificar se há fundos livres
MyOrderTicket = OrderSend(Symbol(), OP_BUY, LotsNumber, Ask, 3, 0, 0, 0,
NULO, 0, 0, CLR_NONE);
se (MyOrderTicket<0)
{
err = GetLastError();
Imprimir("Erro na abertura da posição: ", err);
MyOrderTicket = 0;
}
}
}
//----
retorno(0);
}
Vejam este exemplo