Existem lógicas complexas que funcionam durante vinte e quatro horas, mas que a dada altura congelam. Isto acontece por vezes no EX5, cujo código fonte não pode ser editado. É possível determinar do exterior que um indicador ou um Expert Advisor está pendurado? Recolher estatísticas sobre a parte calculada de um determinado indicador?
Com indicadores, parece possível, porque estão num estado de suspensão, matam a actualização dos gráficos no seu símbolo. O Conselheiro Especialista pode localizá-lo, embora sem especificar qual o indicador que causou o pairar.
Estabelecimento de registos para proibições. Durante as proibições recebo respostas no fórum, mas só as posso ler. E depois de outra proibição ser levantada, é muito difícil lembrar quem e onde respondeu para poder continuar. É possível resolver este problema (sem conselhos para não ser mais banido)? E, em geral, por vezes lê, mas não tem tempo para responder de imediato. É possível colocar uma bandeira de advertência para "responder mais tarde"?
comp: Estabelecimento de registos para proibições. Durante as proibições recebo respostas no fórum, mas só as posso ler. E depois de outra proibição ser levantada, é muito difícil lembrar quem e onde respondeu para poder continuar. É possível resolver este problema (sem conselhos para não ser mais banido)? E, em geral, por vezes lê, mas não tem tempo para responder de imediato. É possível colocar uma bandeira de advertência para "responder mais tarde"?
Primeiro é preciso pensar, e depois fazer. Não o contrário. Então não haverá problemas com a memória.
Totalmente apoiado!!! É possível responder à pergunta-sugestão
comp: Por vezes lê-se e não se tem tempo para responder de imediato. É possível colocar uma espécie de bandeira de lembrete para si próprio para "responder mais tarde"?
comp: É possível colocar uma bandeira de advertência para si próprio para "responder mais tarde"?
Compreendo-o em parte. Todos querem uma solução para os seus problemas imediatos. No seu caso, é demasiado. Você, mesmo sentado num balneário, está a tentar construir promotores.
Podem as pessoas amáveis explicar por que razão é este o caso? Se for assim, por favor acrescente na documentação que apenas o primeiro dígito após a paragem completa é tido em conta.
Colegas, por favor ajudem. Não tenho cérebros próprios suficientes.
O robô, que fez encomendas limitadas, precisa de eliminar a encomenda restante ao fechar uma posição aberta (não importa se em paragem ou lucro), mas não todas as encomendas, mas aquela cujo número mágico é igual ao bilhete da posição fechada. Portanto, o gatilho para a eliminação deve ser o evento de fecho de posição. Para mim não importa, neste caso, como esta posição fechou (apenas por condição que se feche por SL, então não há limites, que devem ser removidos). Mas se detalharmos e o fizermos correctamente, o gatilho é um TP.
Assim, o robô apaga a ordem, mas não depois de a posição ter sido fechada, mas assim que foi aberta. E começa a combater-se a si próprio, colocando eapagando constantementeas ordens pendentes. Por favor, veja o que está errado.
inputdouble lot = 0.2;
inputdouble TakeProfitPips = 50;
inputdouble StopLossPips = 200;
int bar=0;
int shift=1;
int tiket;
int otkt;
double price;
int cnt;
double TPp,SLp;
int tkt;
int n;
int type;
int _OrdersTotal = 0;
// кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),// состоянием на текущий тикint now_OrdersTotal = 0;
// кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),// состоянием на предыдущий тикstaticint pre_OrdersTotal = 0;
// массив открытых позиций состоянием на текущий тикint now_OrdersArray[][2]; // [№ в списке][№ тикета, тип позиции]// текущий номер позиции в массиве now_OrdersArray (для перебора)int now_CurOrder = 0;
// текущий номер позиции в массиве pre_OrdersArray (для перебора)int pre_CurOrder = 0;
// массив для хранения количества закрытых позиций каждого типаint now_ClosedOrdersArray[6][3]; // [тип ордера][тип закрытия] // временные флагиbool OrderClosed = true, PendingOrderOpened = false;
// временные переменныеint pre_OrdersArray[][2]; // [количество позиций][№ тикета, тип позиции]//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
voidOnTick()
{
if(OrdersTotal()== 0 && iTime(Symbol(),PERIOD_M1,1)==D'14.01.16 16:30')
{
price=Open[shift];
tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot,price,3,price+StopLossPips*Point,price-TakeProfitPips*Point);
if(tiket<0)
{
Print("Ошибка OrderSend № - ",GetLastError());
}
}
if(OrdersTotal()!=0)
{
for(cnt=0; cnt<OrdersTotal(); cnt++)
OrderSelect(cnt,SELECT_BY_POS); // Если есть следующий
{ // Анализ ордеров:
price=OrderOpenPrice();
otkt = OrderTicket();
n=otkt;
//--------------------------------------------------------------if(OrderType()==OP_SELL && OrderMagicNumber()==0)
{
tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot*3,price+100*Point,1,price+StopLossPips*Point,price-TakeProfitPips*Point,"My order",n);
tiket=OrderSend(Symbol(),OP_SELLLIMIT,lot*9,price+200*Point,1,price+StopLossPips*Point,price-TakeProfitPips*Point,"My order",n);
}
}
}
_OrdersTotal = OrdersTotal(); // запоминаем общее количество позицийArrayResize( now_OrdersArray, _OrdersTotal ); // изменяем размер массива открытых позиций под текущее кол-воArrayInitialize( now_OrdersArray, 0.0 ); // обнуляем массив
now_OrdersTotal = 0; // обнуляем количество позиций, соответствующих критериямArrayInitialize( now_ClosedOrdersArray, 0.0 ); // обнуляем массивы закрытых позиций и сработавших ордеров//+------------------------------------------------------------------+//| Перебираем все позиции и записываем в массив //+------------------------------------------------------------------+for ( int z = _OrdersTotal - 1; z >= 0; z -- )
{
if ( OrderSelect( z, SELECT_BY_POS ) )
{
now_OrdersArray[now_OrdersTotal][0] = OrderTicket();
now_OrdersArray[now_OrdersTotal][1] = OrderType();
now_OrdersTotal ++;
}
}
ArrayResize( now_OrdersArray, now_OrdersTotal ); // изменяем размер массива открытых позиций под кол-во позиций, соответствующих критериям//+------------------------------------------------------------------+//| Перебираем список позиций предыдущего тика, и считаем сколько закрылось позиций и//| сработало отложенных ордеров//+------------------------------------------------------------------+for ( pre_CurOrder = 0; pre_CurOrder < pre_OrdersTotal; pre_CurOrder ++ )
{
tkt = pre_OrdersArray[pre_CurOrder][0]; // запоминаем тикет и тип ордера
type = pre_OrdersArray[pre_CurOrder][1];
OrderClosed = true; // предпологаем, что если это позиция, то она закрыласьfor ( now_CurOrder = 0; now_CurOrder < now_OrdersTotal; now_CurOrder ++ ) // перебираем все позиции из текущего списка открытых позиций
{
if ( tkt == now_OrdersArray[now_CurOrder][0] ) // если позиция с таким тикетом есть в списке,
{ OrderClosed = false; // значит позиция не была закрыта (ордер не был удалён)break;
}
}
if ( OrderClosed ) // если была закрыта позиция (удалён ордер),
{
if (OrderSelect( tkt, SELECT_BY_TICKET )) // выбиаем ее
n = tkt; // присваеваем n номер тикета
}
}
//+------------------------------------------------------------------+//| Удаляем ордер с магическим номером = тикету закрытой ранее позиции //+------------------------------------------------------------------+for ( int z = _OrdersTotal - 1; z >= 0; z -- )
{
if ( OrderSelect( z, SELECT_BY_POS ) )
otkt = OrderTicket();
if (n == OrderMagicNumber ())
{OrderDelete( otkt );}
}
return;
}
Pode dizer-me se existe um mecanismo integrado para determinar em que mercado o robô comercial está a funcionar, precisa de identificar os mercados FOREX e FORTS.
A ajuda, pessoal, não pode colocar a língua russa no MT4 no Macbook, parece estar presente, mas é exibida em hieróglifos, mas no meta editor está bem. Construí tudo através do Play on Mac,
Existem lógicas complexas que funcionam durante vinte e quatro horas, mas que a dada altura congelam. Isto acontece por vezes no EX5, cujo código fonte não pode ser editado. É possível determinar do exterior que um indicador ou um Expert Advisor está pendurado? Recolher estatísticas sobre a parte calculada de um determinado indicador?
Com indicadores, parece possível, porque estão num estado de suspensão, matam a actualização dos gráficos no seu símbolo. O Conselheiro Especialista pode localizá-lo, embora sem especificar qual o indicador que causou o pairar.
Estabelecimento de registos para proibições. Durante as proibições recebo respostas no fórum, mas só as posso ler. E depois de outra proibição ser levantada, é muito difícil lembrar quem e onde respondeu para poder continuar. É possível resolver este problema (sem conselhos para não ser mais banido)? E, em geral, por vezes lê, mas não tem tempo para responder de imediato. É possível colocar uma bandeira de advertência para "responder mais tarde"?
Deve-se pensar primeiro e depois fazer. Não o contrário. Então não haverá problemas com a memória.
Palavras de ouro!!!
Por vezes lê-se e não se tem tempo para responder de imediato. É possível colocar uma espécie de bandeira de lembrete para si próprio para "responder mais tarde"?
É possível colocar uma bandeira de advertência para si próprio para "responder mais tarde"?
Pergunta sobre MathRound() em MQL4, que "devolve um valor arredondado ao inteiro mais próximo de um valor numérico especificado".
Código:
Resultado:
Podem as pessoas amáveis explicar por que razão é este o caso? Se for assim, por favor acrescente na documentação que apenas o primeiro dígito após a paragem completa é tido em conta.
Colegas, por favor ajudem. Não tenho cérebros próprios suficientes.
O robô, que fez encomendas limitadas, precisa de eliminar a encomenda restante ao fechar uma posição aberta (não importa se em paragem ou lucro), mas não todas as encomendas, mas aquela cujo número mágico é igual ao bilhete da posição fechada. Portanto, o gatilho para a eliminação deve ser o evento de fecho de posição. Para mim não importa, neste caso, como esta posição fechou (apenas por condição que se feche por SL, então não há limites, que devem ser removidos). Mas se detalharmos e o fizermos correctamente, o gatilho é um TP.
Assim, o robô apaga a ordem, mas não depois de a posição ter sido fechada, mas assim que foi aberta. E começa a combater-se a si próprio, colocando eapagando constantementeas ordens pendentes. Por favor, veja o que está errado.
A ajuda, pessoal, não pode colocar a língua russa no MT4 no Macbook, parece estar presente, mas é exibida em hieróglifos, mas no meta editor está bem. Construí tudo através do Play on Mac,
O vinho 1.9.4 seria muito apreciado.