Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 148

 

Salve.
La funzione OrderSelect restituisce l'errore 0 (ERR_NO_ERROR - Trade transaction was successful)?
Come evitare questo errore?
Allego il codice del programma e le voci del diario.
Con rispetto. Shurkin.

//+------------------------------------------------------------------+
//|                                                    PoligonTd.mq4 |
//|                                           17 сентября 2013 года. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "17 сентября 2013 года."
#property link      ""

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----Функция OrderSelect--------------------------------------------+
string Str="#20552937 buy 1.00 GBPUSD at 1.55450";//Строка
int Tct=StrToDouble(StringSubstr(Str,1,9));//Номер ордера
   if(OrderSelect(Tct,SELECT_BY_TICKET)==true)//Выбор ордера по номеру
string OdSmb=OrderSymbol();//Символ ордера
   else Print("OrderSelect() вернул ошибку - ",GetLastError());
Print("Кс:"," Str=",Str,"; Tct ",Tct,"; OdSmb ",OdSmb,"?");//Кс
//----
   return(0);
  }
//+------------------------------------------------------------------+

2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: removed
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: uninit reason 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: Ks: Str=#20552937 buy 1.00 GBPUSD at 1.55450; Tct 20552937; OdSmb ?
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: OrderSelect() returned error - 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: loaded successfully

 
Shurkin:

Salve.
La funzione OrderSelect restituisce l'errore 0 (ERR_NO_ERROR - Trade transaction was successful)?
Come evitare questo errore?
Allego il codice del programma e le voci del diario.
Saluti. Shurkin.

2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: rimosso
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: uninit reason 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: Kc: Str=#20552937 comprare 1.00 GBPUSD a 1.55450; Tct 20552937; OdSmb ?
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: OrderSelect() returned error - 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: caricato con successo

In realtà non c'è nessun errore di selezione, l'ordine con tale biglietto non esiste.
 
Sepulca:
In realtà, non c'è nessun errore di selezione, l'ordine con tale biglietto non esiste.

Bene... Se non c'è nessun ordine con questo biglietto, OrderSelect() restituirà false

Quindi, sembra che ci sia un errore, dal momento che stiamo passando ad altro. La domanda è perché non c'è nessun errore?

 

Non riesco a capire come implementare la logica con il minimo sforzo.

Se(...) imposta un ordine di stop;

Se(la durata di vita dell'ordine>tempo) ritira l'ordine, e se(...) imposta un nuovo ordine;

La difficoltà è che ci possono essere diverse posizioni già aperte, e come si fa a combatterle tutte? Qual è il modo più semplice?

Grazie!

 

Sto pensando di abbandonare la funzione speciale init(). Credo che questa sia la soluzione giusta, no?

Il mio modo di vedere è questo:

1. Dichiarare una variabile globalmente, per esempio, così:

gInitTrue = false;

Poi creiamo il nostro INIT:

bool myInit()
{
  // Инициализируем..
  // неоходимые..
  // нам..
  // переменные..
  return(true);
}

All'inizio dell'inizio così:

if (gInitTrue == false)
    myInit();
Sarebbe interessante sentire l'opinione di persone più esperte sull'adeguatezza di questo approccio, così come sulla correttezza della soluzione da me proposta per questo problema.
 
Sepulca:

Più buffer.

Ops, ho ricevuto l'errore. Avevo anche bisogno di aggiungere 2 colori, per 2 buffer.
 
hoz:

Sto pensando di abbandonare la funzione speciale init(). Credo che questa sia la soluzione giusta, no?

Il modo in cui la vedo io è questo:

1. Dichiarare una variabile globalmente, per esempio, così:

Poi creiamo il nostro INIT:

All'inizio dell'inizio così:

Sarebbe interessante sentire l'opinione di persone più esperte sull'adeguatezza di questo approccio, così come sulla correttezza della soluzione da me proposta per questo problema.

Qual è la novità di sentire una nuova soluzione? :-))

Uno scopa. Non ho mai avuto bisogno di farlo in questo modo.

 
artmedia70:

Bene... Se non c'è nessun ordine con questo biglietto, OrderSelect() restituirà false

Quindi, sembra che ci sia un errore, dal momento che stiamo passando ad altro. La domanda è perché c'è zero?



Ho controllato - se il numero del biglietto corrisponde - tutto funziona bene,

Se no - la funzione restituisce False, ma OrderSelect() è silenziosa perché non succede niente, ZERO e non succede niente.

 
Zhunko:

Qual è la novità di sentire una nuova soluzione? :-))

Una cosa sola, cazzo. Non ho mai avuto bisogno di farlo in questo modo.



E più precisamente? È stato discusso che INIT può fallire in caso, per esempio, di disconnessioni o altre situazioni simili. Perché non reinizializza i dati stessi in seguito, in caso di imprevisti, e viene eseguito solo una volta! Pertanto, non è proprio l'opzione giusta.
 

La domanda è noiosa, ma la risposta non si vede da nessuna parte, o forse ho solo guardato male:

Nelle funzioni, o forse da qualche altra parte, ho visto il simbolo & dopo il tipo di dati e, se non mi sbaglio, una volta &&

func(int& mm_mode, string symbol, int magic,bool& stop) {

A cosa serve, cosa fa? (Riferimento, se riesci a saperne di più))

Motivazione: