[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 477

 

demlin:
Еще вопрос: какой функцией можно вытащить стоимость одного пункта инструмента?

https://docs.mql4.com/ru/constants/marketinfo

MarketInfo(Symbol(), MODE_TICKVALUE);
 
LazarevDenis:

Per favore, ditemi quale codice dovrebbe essere scritto nell'EA per fare in modo che l'EA scambi solo una volta all'ora

Per esempio, l'EA si è attivato, un ordine è aperto (non mi interessa oltre), vorrei che l'ordine non si aprisse sulla barra corrente su un timeframe orario

tutto si assomiglia:

int hh;
int CurrentHour;
CurrentHour=TimeHour(TimeCurrent());
se (CurrentHour!=hh)
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point);
hh=TimeHour(TimeCurrent());
}

ma ho innumerevoli ordini aperti

int hh = 0;
deve essere impostato prima di start() e init()
 
Ragazzi, aiutatemi a trovare un EA per il trading manuale nel tester sulla storia. Ce ne sono alcuni nel codebase, ho bisogno di uno che sia stato controllato trascinando la didascalia nell'angolo inferiore sinistro del nraffic. Molto semplice, non riesco a trovarne uno. HistTraining e test di visualizzazione. Il trading manuale non lo è. Consulente molto facile, si potrebbero anche impostare i livelli in cui i test si fermano.
 
demlin:

Ciao a tutti!

Per favore, ditemi cosa significa questo:

Ordine di acquisto ...... fallito [timeout del trade]

Sono specificamente interessato a che tipo di timeout è.

https://www.mql5.com/ru/forum/112612
Questa è una risposta del server scaduta --- se l'affare si è aperto o no. E non c'è garanzia che il commercio non si sia aperto.

Quindi, devo controllare se l'ordine è aperto in un minuto e poi continuare il trading.

 

rlx:


deve essere impostato prima di start() e init()


int hh = 0;
int init()
{
return(0);
}
int start()
{
//-------------------------------------------------
int countorder;
countorder=OrdersTotal();
if (countorder==0)
{
Alert ("nessun ordine aperto");
}else
{
Alert ("hanno ordini aperti");
}
int hh;
int CurrentHour;
CurrentHour=TimeHour(TimeCurrent());
if ((CurrentHour!=h)&&(countorder==0))
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point);
hh=TimeHour(TimeCurrent());
}
//-------------------------------------------------
return(0);
}

int deinit()
{
return(0);
}

Ho fatto come hai detto, nessun effetto, ho aggiunto il conteggio degli ordini aperti, ora apre gli ordini subito dopo la chiusura

L'ho aggirato tramite OrderCloseTime() - ora sembra funzionare

int countorder;
countorder=OrdersTotal();
if (countorder==0)
{
Alert ("no open orders");
}else
{
Alert ("have open orders");
}
int hh;
int CurrentHour;
int LastOrderCloseTime;
CurrentHour=TimeHour(TimeCurrent());


OrderSelect(HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
hh=TimeHour(OrderCloseTime());


se ((CurrentHour!=hh)&&(countorder==0))
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point);
}

 
rlx:

https://www.mql5.com/ru/forum/112612
Questo è il periodo di attesa per il server per rispondere --- se un trade è stato aperto o no. E non c'è garanzia che l'affare non si sia aperto.

Pertanto, come raccomandato dagli sviluppatori, controllate dopo un minuto se un ordine è stato aperto e solo allora procedete.

Grazie per le risposte
 
Roger:

Tuttavia, non voglio essere una spina nel fianco.

Spiegatemi come si apre un ordine se OrderTotal() è zero.

Grazie.


Qui sotto c'è la figura con le parentesi che limitano il blocco di codice che viene eseguito sotto la condizione

if(OrdersTotal()>0&&tral>0&&OrderMagicNumber()==MAGIC&&(OrderType()==OP_SELL||OrderType()==OP_BUY))

Le operazioni OrderSend() non sono interessate da questa condizione.

 

come ottenere un numero di bar, nel "futuro" :)

iBarShift() funziona bene per ottenere il numero di barra dalla storia, ma come otterreste il numero di barra per questo codice se spostate la linea a destra - oltre la barra zero?

static string name_vline = "linescr";
//________________________________________________
int init(){
   DrawLine(name_vline,Time[5],Red);
return(0);
}
//________________________________________________
int deinit() {
return(0);
}
//________________________________________________
int start(){
   datetime X;
   X = ObjectGet(name_vline,OBJPROP_TIME1);
   Comment("Координата X = ",iBarShift(NULL,0,X),"\n",
           "Время = ",TimeToStr(X));
return(0);
}
//________________________________________________
void DrawLine(string name, datetime tim, color cl){
   ObjectCreate(name, OBJ_VLINE, 0, tim, Close[0], tim, Close[0]);
   ObjectSet(name, OBJPROP_BACK  , false);
   ObjectSet(name, OBJPROP_COLOR, cl);
   ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);      
   ObjectSet(name, OBJPROP_WIDTH, 0);
}
 
IgorM:

come ottenere un numero di bar, nel "futuro" :)

iBarShift() funziona bene per ottenere il numero di barra dalla storia, ma come posso ottenere il numero di barra per questo codice se sposto la linea a destra - oltre la barra zero?

Si può ottenere un offset relativo a Time[0]

shift = MathRound((Time[0] - X) / (Period()*60));
 
rlx:

Si può ottenere un offset relativo a Time[0]

Grazie! Ora è tutto a posto!

static string name_vline = "linescr";
//________________________________________________
int init(){
   DrawLine(name_vline,Time[5],Red);
return(0);
}
//________________________________________________
int deinit() {
return(0);
}
//________________________________________________
int start(){
   datetime X;
   X = ObjectGet(name_vline,OBJPROP_TIME1);
   if(X<=Time[0])
         Comment("Координата X = ",iBarShift(NULL,0,X),"\n",  "Время = ",TimeToStr(X));
   else
         Comment("Координата X = ",MathRound((Time[0] - X) / (Period()*60)),"\n","Время = ",TimeToStr(X));
return(0);
}
//________________________________________________
void DrawLine(string name, datetime tim, color cl){
   ObjectCreate(name, OBJ_VLINE, 0, tim, Close[0], tim, Close[0]);
   ObjectSet(name, OBJPROP_BACK  , false);
   ObjectSet(name, OBJPROP_COLOR, cl);
   ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);      
   ObjectSet(name, OBJPROP_WIDTH, 0);
}