Discussione sull’articolo "Creazione di un algoritmo di market making in MQL5"

 

Il nuovo articolo Creazione di un algoritmo di market making in MQL5 è stato pubblicato:

Come funzionano i market maker? Analizziamo questo problema e creiamo un algoritmo di market making rudimentale.

Molti pensano che un market maker non si assuma alcun rischio. Tuttavia, non è così. Il rischio principale per un market maker è il rischio di invenduto. Questo rischio risiede nel fatto che una posizione può muoversi bruscamente in una direzione senza la possibilità di chiuderla e guadagnare sullo spread. Ad esempio, quando un gruppo in preda al panico vende un asset, il market maker è costretto ad acquistare l'intera offerta. Di conseguenza, il prezzo scende in territorio negativo, causando perdite al MM. 

Le aziende cercano di evitare questo rischio utilizzando equazioni speciali per il centraggio dello spread e determinando il prezzo ottimale per l'acquisto e la vendita. Ma questo non è sempre realizzabile. Anche se il prezzo non è ottimale, il compito dei MM è quello di fornire liquidità al mercato, e devono svolgere questo compito, anche se opera temporaneamente in perdita. 


Autore: Yevgeniy Koshtenko

 

Grazie, Eugene, per l'articolo! Molte lacune nel puzzle delle mie conoscenze sul mercato delle valute sono state quasi completamente colmate.

C'è una sola sfumatura: alcuni lettori del tuo articolo potrebbero non avviare l' Expert Advisor nel tester della strategia se la coppia di valute da testare ha un suffisso o un prefisso. Dovrebbero tenerne conto e specificarlo nelle impostazioni dei parametri dell'Expert Advisor.

Ma così - tutto è SUPER!!!

Saluti, Vladimir.

 
MrBrooklin #:

Grazie, Eugene, per l'articolo! Molte lacune nel puzzle della mia conoscenza del mercato valutario sono state quasi completamente colmate.

C'è una sola sfumatura: alcuni lettori del tuo articolo potrebbero non avviare l' Expert Advisor nel tester della strategia se la coppia di valute da testare ha un suffisso o un prefisso. Dovrebbero tenerne conto e specificarlo nelle impostazioni dei parametri dell'Expert Advisor.

Per il resto, tutto è SUPER!!!

Saluti, Vladimir.

Grazie mille! Domani controllerò con i prefissi di un altro broker. Se c'è qualcosa, farò un'aggiunta)

 

Eugene, ieri non ho guardato da vicino il codice dell'Expert Advisor, perché ero più interessato alla parte testuale dell'articolo, quindi non ho fatto domande sulla parte di codice evidenziata in giallo:

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int CountOrders(string symb,ENUM_ORDER_TYPE type)
  {
   int count=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(OrderGetTicket(i)))
        {
         if(OrderGetInteger(ORDER_TYPE)==type && PositionGetString(POSITION_SYMBOL)==symb && PositionGetInteger(POSITION_MAGIC)==Magic)
            count++;
        }
     }
   return(count);
  }

Ho prestato subito attenzione al tuo avviso: ecco le funzioni per il conteggio degli ordini aperti e delle posizioni aperte. CountOrders e CountTrades si occupano di contare gli ordini e le posizioni aperte per un determinato simbolo tenendo conto del numero magico EA. Non sono ancora utilizzate nel codice, ma lo saranno nelle versioni future, quando finalmente scriverò una funzione normale per centrare lo spread tra i limiti....

Ma non capisco bene: era una tua idea o dovrebbe essere diversa?

Saluti, Vladimir.

 
MrBrooklin posizioni aperte. CountOrders e CountTrades si occupano di contare gli ordini e le posizioni aperte per un determinato simbolo tenendo conto del numero magico EA. Non sono ancora utilizzate nel codice, ma lo saranno nelle prossime versioni, quando finalmente scriverò una funzione normale per centrare lo spread tra i limiti....

Ma non capisco bene: era una tua idea o dovrebbe essere diversa?

Saluti, Vladimir.

Symb intende realizzare in futuro una versione multicurrency dell'Expert Advisor. Non sono ancora riuscito a realizzarla)))))

 
Yevgeniy Koshtenko #:

È previsto - perché altrimenti l'EA può iniziare a confondere gli ordini del suo mago con gli altri). Non sono ancora riuscito a realizzarla)))))

Tutto è chiaro con gli ordini, ma perché le posizioni dei simboli e dei maghi sono controllate in questa funzione? ))

Saluti, Vladimir.

 

Questa è una vergogna per MQ, non un articolo. Come si può permettere che una cosa del genere venga pubblicata?

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int CountTrades(string symb)
  {
   int count=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetString(POSITION_SYMBOL)==symb && PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            count++;
           }
        }
     }
   return(count);
  }

PositionGetTicket(i) secondo la documentazione"La funzione restituisce un ticket di una posizione in base all'indice nell'elenco delle posizioni aperte e seleziona automaticamente questa posizione per lavorare ulteriormente con essa...". E perché selezionare una posizione in base al suo ticket utilizzando la funzione PositionSelectByTicket se è già selezionata? State insegnando ai nuovi arrivati come non farlo?

L'osservazione di Vladimir è corretta. E la tua risposta non riguarda affatto questo... Perché controllare il simbolo e la magica POSIZIONE se lavoriamo con gli ordini????

 

A parte il codice, non mi è piaciuta nemmeno la parte testuale.

È spazzatura, non è altro che un pezzo di carta.

È un argomento interessante, non c'è da discutere.

Che tipo di mercato stiamo creando, che senso ha?

Il fatto che non sia stato possibile crearlo è un dato di fatto, perché all'autore manca la matrice.

e ce n'è molta in giro.

È necessario pensarci per almeno altri ... dieci anni, forse riusciremo a realizzarlo.

come inizio e come modo per migliorare - ok, in questo sono d'accordo.

 

Renat Akhtyamov #:

Che tipo di mercato stiamo creando, che senso ha?

Il fatto che non sia stato possibile crearlo è un dato di fatto, poiché all'autore mancava la matrice necessaria.

Dovreste leggere l'articolo non in diagonale, ma dall'inizio alla fine, cioè in modo completo, così non sorgeranno domande del genere.

Sonocompletamente d'accordo con la critica di Alexey Viktorov sull'uso della funzionePositionSelectByTicket() quando un biglietto è già stato selezionato senza di essa. A proposito, non ci ho fatto caso nemmeno io.

Ma grazie comunque per l'articolo!

Saluti, Vladimir.

 
MrBrooklin #:

L'articolo non deve essere letto in diagonale, ma dall'inizio alla fine, cioè in modo completo, così non si porranno domande di questo tipo.

Sono completamente d'accordo con la critica di Alexey Viktorov sull'uso della funzione PositionSelectByTicket () quando un biglietto è già stato selezionato senza di essa. A proposito, io stesso non ci ho fatto caso.

Ma grazie comunque per l'articolo!

Saluti, Vladimir.

Non viene selezionato un biglietto, ma una posizione per lavorare con le sue proprietà tramite le funzioni corrispondenti.

 
Alexey Viktorov #:

Non viene selezionato un biglietto, ma una posizione per lavorare con le sue proprietà attraverso le funzioni appropriate.

Ciao Alexei, grazie per il chiarimento. )) Quando ho scritto il mio messaggio, mi sono basato sulla stessa documentazione (evidenziata in giallo):

Функция возвращает тикет позиции по индексу в списке открытых позиций и автоматически выбирает эту позицию для дальнейшей работы с ней 
при помощи функций PositionGetDouble, PositionGetInteger, PositionGetString.

ulong  PositionGetTicket(
   int  index      // numero nell'elenco degli elementi
   );

Параметры

index

[in]  Индекс позиции в списке открытых позиций, начиная с 0.

Возвращаемое значение

Тикет позиции. В случае неудачного выполнения возвращает 0.

Saluti, Vladimir.