Se quiser assistir no testador, pode remover o teste por um tempo mais tarde do que o tempo real. Isto está no OnInit. E não me lembro se em 4ka no testador um pedido de tempo irá devolver exactamente o tempo do testador. Acho que vai devolver a hora actual, por isso, no testador só se fazem encomendas de uma só vez e pronto. O pedido de hora local também dará a hora local actual.
Está nos 5k no testador um emulador de ambiente completo.
Por favor, ajude-me a fazer correcções. Esta EA não fecha à força as ordens abertas. Gostaria que, juntamente com o tempo de fixação de limites, pudéssemos também definir a hora do seu fecho forçado. Precisamos de TP e trall para os optimizar. Um centro comercial, para que todos os limites fossem fechados de uma forma pequena, mas que recolhessem o ruído da noite.
Olá. Quem pode ajudar com um EA para MT4. Preciso de uma EA sem qualquer truque para seguir encomendas feitas manualmente (com ou sem magia). Se uma ordem for fechada com um stop loss, a EA abrirá uma nova ordem na mesma direcção com o lote especificado, SL e TP.Se uma ordem for fechada com um take profit, a EA abrirá uma nova ordem na direcção oposta com o lote especificado, SL e TP. Talvez haja algumas soluções prontas, não consegui encontrar nada. Muito obrigado de antemão.
Estabelecer 2 ordens de limite de compra/venda de forma diferente a X distância uma da outra com paragem, tomada, arrasto.
Por exemplo:
Se o preço atingir qualquer um dos limites e fechar esta ordem na paragem ou tomada, o limite oposto é cancelado e 2 limites dirigidos de forma diferente são novamente estabelecidos.
E como se pode limitar a propagação de limitadores?
Quer dizer, se o spread for superior a 5 pips, por exemplo, então não faça encomendas pendentes, mas se for demasiado problemático, pode saltar este parâmetro.
Ivan Bielyi #: Quero dizer que se o spread for superior a 5 pontos então não devemos colocar ordens pendentes, mas se for muito problemático, podemos saltar este parâmetro.
Qual é o objectivo? Não serão executados agora (são limites). E quando chegar o momento de executar, a propagação será completamente diferente.
Se quiser assistir no testador, pode remover o teste por um tempo mais tarde do que o tempo real. Isto está no OnInit. E não me lembro se em 4ka no testador um pedido de tempo irá devolver exactamente o tempo do testador. Acho que vai devolver a hora actual, por isso, no testador só se fazem encomendas de uma só vez e pronto. O pedido de hora local também dará a hora local actual.
Está nos 5k no testador um emulador de ambiente completo.
Obrigado pelo esclarecimento
//+------------------------------------------------------------------+
//| i`lbeback.mq4 |
//| Copyright ? 2011, AM2 && Tiburond |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright ? 2011, AM2 && Tiburond"
#property link "http://www.forexsystems.biz"
#define MAGIC 20110406
extern int StopLoss = 1300; //???????? ??????
extern int StartHour = 21; //??? ?????? ????????(???????????? ?????)
extern int Distance = 250; //?????????? ?? ???? ??? ????????? ??????
extern int Step = 50; //??? ????????? ???????
extern int Count = 4; //?????????? ??????????????? ???????
extern int Expiration = 4; //????? ????????? ??????
extern double Lots = 1; //???
extern bool MM = true; //?????????? ???????????????
extern double TSP = 5; //????
extern bool BU = true; //?????????? ?????? ??????? ? ????????? ? ??????? ???
extern int BUHour = 2; //??? ????? ??????? ??????? ??????? ? ?????????
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int b=0,s=0,res;
datetime expiration = TimeCurrent()+3600*Expiration;
double BuyPrice=fND(Open[0]-Distance*Point);
double SellPrice=fND(Open[0]+Distance*Point);
for (int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC) continue;
if (OrderType()==OP_BUYLIMIT) b++;
if (OrderType()==OP_SELLLIMIT) s++;
}
}
if (Hour()>BUHour && Hour()<StartHour && AllProfit()>0) ClosePositions();
if (Hour()>BUHour && DayOfWeek() == 5) ClosePositions();
if (Hour()==StartHour && b<1 && DayOfWeek() != 5)
for(i=1;i<=Count;i++)
{
{
res=OrderSend(Symbol(),OP_BUYLIMIT,fLots(),fND(Ask-(Distance*Point+i*Step*Point)),3,fND(BuyPrice-StopLoss*Point),fND(Open[0]),"",MAGIC,expiration,Blue);
Sleep(3000);
if(res<0)
{
Print("??????: ",GetLastError());
} else {
RefreshRates();
}
}
}
if (Hour()==StartHour && s<1 && DayOfWeek() != 5)
for(i=1;i<=Count;i++)
{
{
res=OrderSend(Symbol(),OP_SELLLIMIT,fLots(),fND(Bid+(Distance*Point+i*Step*Point)),3,fND(SellPrice+StopLoss*Point),fND(Open[0]),"",MAGIC,expiration,Red );
Sleep(3000);
if(res<0)
{
Print("??????: ",GetLastError());
} else {
RefreshRates();
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
double fND(double d, int n=-1)
{
if (n<0) return(NormalizeDouble(d, Digits));
return(NormalizeDouble(d, n));
}
//+------------------------------------------------------------------+
double fLots()
{
double lot=Lots;
double lot_min =MarketInfo( Symbol(), MODE_MINLOT );
double lot_max =MarketInfo( Symbol(), MODE_MAXLOT );
if (MM)
{
double lot_step =MarketInfo( Symbol(), MODE_LOTSTEP );
double lotcost =MarketInfo( Symbol(), MODE_TICKVALUE );
double dollarsPerPip=0.0;
lot = AccountFreeMargin()*TSP/100.0;
dollarsPerPip=lot/StopLoss;
lot=fND(dollarsPerPip/lotcost, 2);
lot=fND(lot/lot_step, 0) * lot_step;
}
if (lot<lot_min) lot=lot_min;
if (lot>lot_max) lot=lot_max;
return(lot);
}
//+------------------------------------------------------------------+
void ClosePositions()
{
if(BU)
for (int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol())
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC)
{
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 3, Blue);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, 3, Red);
}
Sleep(1000);
}
}
}
//+------------------------------------------------------------------+
double AllProfit()
{
double Profit = 0;
for (int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MAGIC) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC)
if (OrderType() == OP_BUY || OrderType() == OP_SELL) Profit += OrderProfit();
}
return (Profit);
}
//+------------------------------------------------------------------+
Por favor, ajude-me a fazer correcções. Esta EA não fecha à força as ordens abertas. Gostaria que, juntamente com o tempo de fixação de limites, pudéssemos também definir a hora do seu fecho forçado.
Precisamos de TP e trall para os optimizar. Um centro comercial, para que todos os limites fossem fechados de uma forma pequena, mas que recolhessem o ruído da noite.
Se tiver uma boa estratégia e estiver disposto a partilhá-la, posso escrever um EA.
Como posso limitar a propagação de ordens de limite?
E como se pode limitar a propagação de limitadores?
Quero dizer que se o spread for superior a 5 pontos então não devemos colocar ordens pendentes, mas se for muito problemático, podemos saltar este parâmetro.
Qual é o objectivo? Não serão executados agora (são limites). E quando chegar o momento de executar, a propagação será completamente diferente.
Qual é o objectivo? Não serão executados agora (são limites). E quando chegar o momento de executar, a propagação será completamente diferente.
O que é preciso como base e quão complexo é o algoritmo.
Determina a tendência média móvel