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

 
AndrewX:

Si prega di consigliare come impostare il controllo corretto nella condizione di apertura della posizione - se c'è una posizione aperta per questo strumento o no. E se c'è una posizione per il simbolo (qualsiasi vendita o acquisto), allora l'apertura non avviene, altrimenti scatta il segnale di apertura della posizione?

Ecco il codice (credo che sia responsabile dell'apertura delle posizioni):

Sembra essere corretto nella logica, ma non funziona ancora apre diverse pose su uno strumento.

P.S. Non sono un programmatore. Se è possibile spiegare in modo più dettagliato al dummie.


Questo non è difficile. È meglio organizzare 2 sottoprogrammi che contano gli ordini.

// =================================================================================================
// ************************* Счётчики ордеров ******************************************************
// =================================================================================================


//=========== SchBuy()  ===============================
//  Функция возвращает количество Buy-ордеров
//   SchBuy      - счётчик Buy ордеров
//-----------------------------------------------------------
int SchBuy(int MAGIC){
  string SMB=Symbol();
  int SchBuy=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--) {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
      if(OrderSymbol()!= SMB || OrderMagicNumber()!= MAGIC){ continue;}
      if(OrderType()==OP_BUY){ 
        SchBuy++;
      }  
    }
  }
  return(SchBuy);
}                  
//==================================================================================================


//=========== SchSell()  ===============================
//  Функция возвращает количество Sell-ордеров
//  SchSell  - счётчик Sell ордеров
//-----------------------------------------------------------
int SchSell(int MAGIC){
  string SMB=Symbol();
  int SchSell=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--){
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {Print("Ошибка № ",GetLastError()," при выборе ордера № ",i);}
    else {
      if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC){ continue;} 
      if(OrderType()==OP_SELL){
        SchSell++;
      }
    }
  }
 return(SchSell);     
}                  
//==================================================================================================

Inoltre, nel codice stesso, prich:

if(SchBuy(MAGIC)+SchSell(MAGIC)<=0){
// ордеров нет - устанавливаем ордер при наличии торгового сигнала
}

La costante MAGIC è meglio dichiarata nelle variabili utente. Come questo:

extern int      MAGIC=467223; // У ордеров открытых вручную MAGIC=0
 

Provato


if (NumberOfPositions(Symbol_1,-1,Magic)<1

все равно не пашет
 
drknn:


Non è complicato. È meglio organizzare 2 sottoprogrammi che contano gli ordini.

Poi, nel codice stesso, prich:

È meglio dichiarare la costante MAGIC nelle variabili utente. Come questo:

Grazie, darò un'occhiata, ma probabilmente è un po' complicato per me.
 
AndrewX:
Grazie, darò un'occhiata, ma probabilmente è un po' complicato per me.

Ho allegato un file EA a questo post. Dagli un'occhiata.
File:
 
Buongiorno! Forse la mia domanda sul non ottimizzare è complicata o di nessun interesse?
 
volshebnik:
Buongiorno! Forse la mia domanda sul non ottimizzare è complicata o di nessun interesse?

Ci sono molte ragioni possibili per questo. Dal banale - mancanza di storia alla variante - nessuna opzione redditizia. Anche se potrebbe essere più semplice - un bug nell'Expert Advisor
 

Per favore, ditemi se il robot crea ordini pendenti.

I comandi per gli ordini in sospeso vengono inviati al server.

Gli ordini pendenti messi in coda sono visualizzati sul terminale?

Lo stesso che se impostassi manualmente gli ordini pendenti? Gli ordini aperti sono in cima, sotto gli ordini pendenti messi in coda?

 
Jaguar1974:

Per favore, ditemi se il robot crea ordini pendenti.

I comandi per gli ordini in sospeso vengono inviati al server.

Gli ordini pendenti messi in coda sono visualizzati sul terminale?

Lo stesso che se impostassi manualmente gli ordini pendenti?


Cosa intende per "accodato"? L'Expert Advisor invia un ordine al server per impostare un ordine pendente. Se i parametri di questo ordine sono corretti, il server imposta l'ordine in sospeso e questo viene immediatamente visualizzato nel terminale del cliente. Se l'Expert Advisor invia un ordine per piazzare ordini pendenti ad un certo passo (viene fatto attraverso un ciclo), allora ogni nuovo ordine viene processato dal server separatamente. Questi ordini sono messi in coda - Expert Advisor ha dato un ordine - il server ha risposto. L'Expert Advisor ha dato nuovamente un ordine e sta aspettando la risposta del server.

Cosa significano gli ordini in coda? Cosa vuoi dire con questo?

 
Vinin:

Ci sono molte ragioni possibili per questo. Da quello banale - mancanza di storia alla variante - nessuna opzione redditizia. Anche se potrebbe essere più semplice: un errore nell'Expert Advisor.
Ho controllato e ha la storia degli Expert Advisors dal 1999. Ho controllato tutte le varianti (anche quelle non redditizie). Se imposto solo un parametro MA, per esempio da 100 a 110, allora l'ottimizzazione "muore" - nessun risultato, nessun grafico.... Per non parlare dell'inclusione di altri parametri.
 
volshebnik:
Ho controllato - c'è una storia di verbali dal 1999. Ho spuntato la casella di controllo per mostrare tutte le varianti (anche quelle non redditizie). Ho messo anche solo un parametro MA sull'ottimizzazione, per esempio da 100 a 110 e tutto - l'ottimizzazione "muore" - nessun risultato, nessun grafico.... Per non parlare dell'inclusione di altri parametri.

Devo guardare l'Expert Advisor. Non posso dire nulla in questo modo