Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 879

 
lil_lil:

Grazie.

Cosa c'è che non va ora?

Ho suggerito di iniziare con HistorySelectByPosition e tu l'hai infilato da qualche parte nel profondo degli if...

Ci può essere solo una posizione per simbolo in un conto di compensazione. Ottieni l'ID della posizione, ottieni la lista dei trade coinvolti nella formazione di questa posizione e contali per direzione del trade e tipo di ordine.

 
Alexey Kozitsyn:

Artyom, ripeto la domanda, per favore rispondi:


Non ho visto la domanda :)

Onestamente - non ricordo, ma penso che funzioni in MT5 - non è vero?

Ma nel tester stavo mettendo gli ordini pendenti... E ho lavorato con il mouse. Ma forse mi sono confuso e stavo lavorando con il mouse su un grafico reale e usando i pulsanti nel tester...

Non indovinerò - ho smontato tutta la mia libreria a piccole viti circa mezzo anno fa, e non sarò più in grado di controllarla rapidamente. Ho rimandato la sua ricostruzione fino all'autunno. Quindi, è più veloce controllare il lavoro del modello di evento OnChartEvent() nel tester. Ma non ho ancora tempo per questo - mi dispiace :)

 
Artyom Trishkin:

Non ho visto la domanda :)

Onestamente - non ricordo, ma penso che funzioni in MT5 - non è vero?

Ma ho messo gli ordini pendenti nel tester... E ho lavorato con il mouse. Ma può essere che ho confuso la mia memoria e stavo lavorando con il mouse su un grafico reale e usando i pulsanti nel tester...

Non indovinerò - ho smontato tutta la mia libreria a piccole viti circa mezzo anno fa, e non sarò più in grado di controllarla rapidamente. Ho rimandato la sua ricostruzione fino all'autunno. Quindi, è più veloce controllare il lavoro del modello di evento OnChartEvent() nel tester. Ma non ho ancora tempo per questo - mi dispiace :)

C'è tutto il codice di prova:

switch( id )
{
default:
   Print( __FUNCTION__,": id = "+EnumToString( (ENUM_CHART_EVENT)id ) );
}

nessuna risposta, purtroppo, nel tester. Nella funzione OnChartEvent(). Chiamato dall'Expert Advisor.

 
Alexey Kozitsyn:

L'intero codice di prova è lì:

nessuna risposta, purtroppo, nel tester. Nella funzione OnChartEvent().

E CHART_EVENT_MOUSE_MOVE=true è impostato?
 
Alexey Viktorov:

Ho suggerito di iniziare con HistorySelectByPosition, ma l'hai infilato da qualche parte in profondità negli if...

In un conto di compensazione ci può essere solo una posizione per simbolo. Ottiene l'ID della posizione, ottiene l'elenco delle transazioni che formano questa posizione e le conta per direzione della transazione e tipo di ordine.

L'ho fatto, perché voglio fare una funzione di conteggio universale, per il netting e l'hedging, o è impossibile?

 
Artyom Trishkin:
CHART_EVENT_MOUSE_MOVE=true è impostato?

No, ma è improbabile che questo risolva il problema, dato che sono stati premuti i tasti ctrl, shift e altri... non c'è stata alcuna reazione.

 
lil_lil:

Bloccato perché voglio fare una funzione di conteggio universale, per il netting e l'hedging, o è impossibile?

È possibile. Ma gli approcci sono diversi, e devono essere pianificati adeguatamente prima, piuttosto che scaricare tutto in una linea di codice...

 
Alexey Kozitsyn:

No, ma è improbabile che questo risolva il problema, dato che sono stati premuti i tasti ctrl, shift e altri... Non c'è stata alcuna reazione.

Comunque, non ho davvero tempo per sperimentare in questo momento - ho le mie cose da fare.

Forse me ne sono davvero dimenticato. Ma ho impostato i limiti di tempo nel tester. È abbastanza probabile - proprio gli stessi pulsanti. So anche che li ho impostati con il mouse. Ma forse anche su un grafico dal vivo...

 
Artyom Trishkin:

Probabilmente. Ma gli approcci sono diversi, e hanno bisogno di essere pianificati correttamente prima, piuttosto che scaricare tutto in una linea di codice...

Quindi lo farò separatamente, per ora.

Cosa mi sono perso?

int GetNum(const string aSymbol)
  {
   int    count=0;
   if(PositionSelect(aSymbol))
     {
      long pos_id=long(PositionGetInteger(POSITION_IDENTIFIER));

      if(pos_id>0)
        {
         if(HistorySelectByPosition(ulong(pos_id)))
           {
            int deals=HistoryDealsTotal();

            for(int i=0; i<deals; i++)
              {
               ulong deal_ticket=HistoryDealGetTicket(i);
               ulong order_ticket=ulong(HistoryDealGetInteger(deal_ticket,DEAL_ORDER));

               if(order_ticket>0)
                 {
                  long deal_entry=long(HistoryDealGetInteger(deal_ticket,DEAL_ENTRY));

                  if(deal_entry==DEAL_ENTRY_IN)
                    {
                     if(m_position.PositionType()==POSITION_TYPE_SELL)
                       {
                        count++;
                       }
                    }
                 }
              }
            if( count > 0 ) return(count);
           }
         else
           {
            Print("Не возможно получить историю позиции по символу ",aSymbol);
           }
        }
      else
        {
         Print("Не возможно определить идентификатор позиции по символу ",aSymbol);
        }
     }
   return( 0 );
  }
////////////
 
Prima conta correttamente, poi, quando si attivano 5 limit SELL, scrive 6 nel commento. da dove viene il sesto?
Motivazione: