Ci sono logiche complesse che funzionano per ventiquattro ore, ma a un certo punto si bloccano. Questo succede a volte in EX5, il cui codice sorgente non può essere modificato. È possibile determinare dall'esterno che un indicatore o un Expert Advisor si blocca? Raccogliere statistiche sulla parte calcolata di un particolare indicatore?
Con gli indicatori, sembra possibile, perché sono in uno stato di sospensione che uccidono l'aggiornamento dei grafici sul loro simbolo. L'Expert Advisor può rintracciarlo, anche se senza specificare quale indicatore ha causato l'hover.
Stabilendo dei record per i divieti. Durante i divieti ricevo risposte sul forum, ma posso solo leggerle. E dopo un altro divieto è molto difficile ricordare chi e dove ha risposto per continuare. È possibile risolvere questo problema (senza consigli per non essere più bannati)? E in generale a volte si legge, ma non si ha il tempo di rispondere subito. È possibile impostare un flag di promemoria per "rispondere più tardi"?
comp: Stabilendo dei record per i divieti. Durante i divieti ricevo risposte sul forum, ma posso solo leggerle. E dopo un altro divieto è molto difficile ricordare chi e dove ha risposto per continuare. È possibile risolvere questo problema (senza consigli per non essere più bannati)? E in generale a volte si legge, ma non si ha il tempo di rispondere subito. È possibile impostare un flag di promemoria per "rispondere più tardi"?
Prima bisogna pensare e poi fare. Non il contrario. Allora non ci saranno problemi di memoria.
Completamente supportato!!! È possibile rispondere alla domanda-suggerimento
comp: A volte lo si legge e non si ha il tempo di rispondere subito. È possibile mettere una specie di flag di promemoria a se stessi per "rispondere più tardi"?
comp: È possibile mettere un flag di promemoria a se stessi per "rispondere più tardi"?
Ti capisco in parte. Tutti vogliono una soluzione ai loro problemi immediati. Nel tuo caso, è troppo. Tu, anche seduto in un bagno, stai cercando di costruire gli sviluppatori.
Potete spiegarmi perché questo è il caso? Se deve essere così, si prega di aggiungere nella documentazione che solo la prima cifra dopo il punto è presa in considerazione.
Colleghi, per favore aiutatemi. Non ho abbastanza cervello per conto mio.
Il robot, che ha piazzato ordini Limit, ha bisogno di cancellare l'ordine rimanente quando chiude una posizione aperta (non importa se è allo stop o al profitto), ma non tutti gli ordini, ma quello il cui numero magico è uguale al ticket della posizione chiusa. Quindi, il trigger per la cancellazione deve essere l'evento di chiusura della posizione. Per me non importa in questo caso, come questa posizione ha chiuso (solo per condizione risulterà che se la chiusura da SL, allora non ci sono limiti, che devono essere rimossi). Ma se dettagli e lo facciamo bene, l'innesco è un TP.
Quindi, il robot cancella l'ordine, ma non dopo che la posizione è stata chiusa, ma non appena è stata aperta. E comincia a combattere se stesso piazzando ecancellando costantementegli ordini in sospeso. Si prega di vedere cosa c'è che non va.
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;
}
Puoi dirmi se c'è un meccanismo incorporato per determinare in quale mercato il robot di trading sta funzionando, è necessario identificare i mercati FOREX e FORTS.
Aiuto, ragazzi, non riesco a mettere la lingua russa su MT4 su Macbook, sembra essere presente, ma viene visualizzato in geroglifici, ma nel meta editor va bene. Ho costruito tutto tramite Play su mac,
Ci sono logiche complesse che funzionano per ventiquattro ore, ma a un certo punto si bloccano. Questo succede a volte in EX5, il cui codice sorgente non può essere modificato. È possibile determinare dall'esterno che un indicatore o un Expert Advisor si blocca? Raccogliere statistiche sulla parte calcolata di un particolare indicatore?
Con gli indicatori, sembra possibile, perché sono in uno stato di sospensione che uccidono l'aggiornamento dei grafici sul loro simbolo. L'Expert Advisor può rintracciarlo, anche se senza specificare quale indicatore ha causato l'hover.
Stabilendo dei record per i divieti. Durante i divieti ricevo risposte sul forum, ma posso solo leggerle. E dopo un altro divieto è molto difficile ricordare chi e dove ha risposto per continuare. È possibile risolvere questo problema (senza consigli per non essere più bannati)? E in generale a volte si legge, ma non si ha il tempo di rispondere subito. È possibile impostare un flag di promemoria per "rispondere più tardi"?
Bisogna prima pensare e poi fare. Non il contrario. Allora non ci saranno problemi di memoria.
Parole d'oro!!!
A volte lo si legge e non si ha il tempo di rispondere subito. È possibile mettere una specie di flag di promemoria a se stessi per "rispondere più tardi"?
È possibile mettere un flag di promemoria a se stessi per "rispondere più tardi"?
Domanda su MathRound() in MQL4, che "restituisce un valore arrotondato all'intero più vicino di un valore numerico specificato".
Codice:
Risultato:
Potete spiegarmi perché questo è il caso? Se deve essere così, si prega di aggiungere nella documentazione che solo la prima cifra dopo il punto è presa in considerazione.
Colleghi, per favore aiutatemi. Non ho abbastanza cervello per conto mio.
Il robot, che ha piazzato ordini Limit, ha bisogno di cancellare l'ordine rimanente quando chiude una posizione aperta (non importa se è allo stop o al profitto), ma non tutti gli ordini, ma quello il cui numero magico è uguale al ticket della posizione chiusa. Quindi, il trigger per la cancellazione deve essere l'evento di chiusura della posizione. Per me non importa in questo caso, come questa posizione ha chiuso (solo per condizione risulterà che se la chiusura da SL, allora non ci sono limiti, che devono essere rimossi). Ma se dettagli e lo facciamo bene, l'innesco è un TP.
Quindi, il robot cancella l'ordine, ma non dopo che la posizione è stata chiusa, ma non appena è stata aperta. E comincia a combattere se stesso piazzando ecancellando costantementegli ordini in sospeso. Si prega di vedere cosa c'è che non va.
Aiuto, ragazzi, non riesco a mettere la lingua russa su MT4 su Macbook, sembra essere presente, ma viene visualizzato in geroglifici, ma nel meta editor va bene. Ho costruito tutto tramite Play su mac,
Wine 1.9.4 sarebbe molto apprezzato.