[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

 
Vinin:

Victor, dê uma olhada em sua mensagem pessoal, por favor.
 
glasha:
Victor, dê uma olhada em sua mensagem pessoal, por favor.

Viu-o
 
dimon74:

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;}

 
gheka:

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;}

total = CountTrades();
if (total < 1) {
ticket = OrderSend
}

int CountTrades() {
   int count = 0;
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
   }
   return (count);
}
 
gheka:


é 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

Você deve verificar aqui.
 

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?

 
gheka:

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.
 
Superjake:

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