Discussione sull’articolo "Le funzionalità di ChatGPT di OpenAI nell'ambito dello sviluppo di MQL4 e MQL5" - pagina 2

 
Valeriy Yastremskiy #:
Sarebbe bello) come parte della condivisione dell'esperienza) il compito è complicato dal fatto che µl non conosce molto bene i linguaggi gpt. A volte è piuttosto difficile ottenere il codice senza errori.
ChatGPT 3.5 scrive normalmente in MQL4/5, quindi non fatevi strane idee. Il valore dell'articolo dovrebbe risiedere nei suggerimenti e nel mostrare il processo di sviluppo con ChatGPT, ma non c'è nulla di tutto ciò. Solo codici generati già pronti che non interessano a nessuno e gratuiti. Il valore dell'articolo è pari a zero, l'autore si becca una "D" e mi chiedo come sia stato permesso di pubblicare questo lavoro scadente.
 
Alexey Volchanskiy #:
ChatGPT 3.5 scrive normalmente in MQL4/5, non siate così banali. Il valore dell'articolo dovrebbe risiedere nei prompt e nel mostrare il processo di sviluppo con ChatGPT, ma non c'è nulla di tutto ciò. Solo codici generati già pronti che non interessano a nessuno e gratuiti. Il valore dell'articolo è pari a zero, l'autore si becca una "D" e mi chiedo come sia stato permesso di pubblicare questo lavoro scadente .

Per coloro che sono nel serbatoio, lasciate che ve lo ripeta: lo scopo dell'articolo non è quello di darvi dei suggerimenti, ma di instillare l'idea che dovreste produrli voi stessi. Non vi rendete conto di cosa accadrebbe all'articolo se scaricassi tutto quello che ho fatto. Ci sono tonnellate di spazzatura inutile che confondono solo le persone. Il materiale deve essere semplice e chiaro. E tu non stai facendo un esame per darmi una D. Fate attenzione.

 
Alexey Volchanskiy #:
ChatGPT 3.5 scrive normalmente in MQL4/5, non siate così banali. Il valore dell'articolo dovrebbe risiedere nei prompt e nel mostrare il processo di sviluppo con ChatGPT, ma non c'è nulla di tutto ciò. Solo codici generati già pronti che non interessano a nessuno e gratuiti. Il valore dell'articolo è pari a zero, l'autore si becca una "D" e mi chiedo come sia stato permesso di pubblicare questo hack job .

Non sono riuscito a ottenere il codice per piazzare un ordine di mercato. Se potete promettere. Ogni volta ho restituito il biglietto.

 
Valeriy Yastremskiy #:

Non sono riuscito a ottenere il codice per piazzare un ordine a mercato. Se potete promettermelo. Mi ha restituito il biglietto ogni volta.

Scrivere una procedura in MQL5 per aprire un ordine di mercato. La funzione dovrebbe accettare i seguenti dati di input:


1) Lotto

2) Take Profit come modulo della differenza di prezzo tra i prezzi di apertura e di chiusura

3) Stop Loss come modulo della differenza di prezzo tra il prezzo di apertura e quello di chiusura

4) Direzione dell'ordine (bool bDirection) true - ACQUISTO ; false - VENDITA

5) Slippage in pips (è la massima deviazione possibile dal prezzo di apertura in pips)

6) Numero magico dell'ordine


Inoltre, se lo Stop Loss o il Take Profit sono pari a zero, l'ordine deve essere aperto senza il corrispondente Stop Loss o Take Profit, a seconda di quale sia pari a zero, o senza Stop Loss e Take Profit se sono entrambi pari a zero.


Inoltre, è necessario controllare il lotto minimo e massimo consentito e, se il lotto non rientra nell'intervallo consentito, riportarlo al numero più vicino disponibile (minimo o massimo).


Fornite commenti esaurienti e cercate di rendere il codice più breve; non dimenticate che i prezzi di stop loss e take profit sono calcolati in modo diverso per gli ordini di acquisto e di vendita.


Non è possibile utilizzare alcuna libreria, ma solo le funzioni del linguaggio MQL5.

// Funzione per ottenere il volume corretto
double CorrectedVolume(double volume)
{
   double minVol = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   double maxVol = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
   double VolStep = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
   
   // Se il volume è inferiore al volume minimo, impostare il volume minimo.
   if(volume < minVol)
       return minVol;
   // Se il volume è maggiore del volume massimo, impostare il volume massimo.
   else if(volume > maxVol)
       return maxVol;
   
   // Convertire il volume in un multiplo del passo di volume
   return (double)((int)(volume / VolStep)) * VolStep; 
}

// Funzione di base dell'inserimento degli ordini
bool OpenOrder(double volume, double stoploss, double takeprofit, bool bDirection, int slip, int magic)
{
   MqlTick last_tick;
   SymbolInfoTick(_Symbol,last_tick);
   
   // Determinare il prezzo di apertura dell'ordine 
   double open_price = bDirection ? last_tick.ask : last_tick.bid;
   // Determinare il valore dell'elemento 
   double point = SymbolInfoPoint(_Symbol);
   
   // Regolare SL e TP a seconda della direzione
   double corrected_sl = bDirection ? open_price - stoploss * point : open_price + stoploss * point;
   double corrected_tp = bDirection ? open_price + takeprofit * point : open_price - takeprofit * point;
   
   // Se SL o TP = 0, l'ordine viene aperto senza SL o TP
   if (stoploss == 0) corrected_sl = 0; 
   if (takeprofit == 0) corrected_tp = 0;
   
   // Tipo di transazione utilizzata
   ENUM_ORDER_TYPE order_type = bDirection ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;
   
   // Struttura per la compilazione dei parametri della richiesta
   MqlTradeRequest request;
   request.type = order_type;
   request.symbol = _Symbol;
   request.volume = CorrectedVolume(volume);
   request.price = open_price;
   request.sl = corrected_sl;
   request.tp = corrected_tp;
   request.deviation = slip;
   request.magic = magic;
   request.type_filling = ORDER_FILLING_FOK;
   request.type_time = ORDER_TIME_DAY;
   
   MqlTradeResult result;
   return OrderSend(request,result); // Inviare l'ordine alla borsa
}

Non ha funzionato subito, ho dovuto rendere il prompt più dettagliato. Si noti che ci sono voluti solo 5 minuti. E non ho cercato nessun prompt, ho solo scritto quello che volevo e come. Il prompt non è affatto una domanda....

 
Tutto questo è inutile con le attuali competenze delle GPT, perché il "cliente" deve trovare gli errori nel sorgente generato, cioè conoscere la risposta corretta o scriverne la maggior parte. Gli attuali GPT sono dei chiacchieroni.
 
Stanislav Korotky #:
Tutto questo è inutile con le attuali competenze delle GPT, perché il "cliente" deve trovare gli errori nel sorgente generato, cioè conoscere la risposta corretta o scriverne la maggior parte. Gli attuali GPT sono dei chiacchieroni.

Beh, in realtà sei lo stesso che dico io, in realtà senza conoscere la lingua e correggere ciò che dà è inutile, ho cercato di spiegarlo nell'articolo, ma non sembra molto alla gente). Vogliono darmi un prompt e basta e sono nel cioccolato ))) E il fatto che si deve pensare, GPT è lì ))))

 
Grazie Eugene per l'articolo! Ho anche sperimentato CHATGPT e altre IA. Sì, a volte produce buoni testi, può persino scrivere poesie in qualsiasi stile, ma nella programmazione commette molti errori, non si può fare nulla senza controllare e modificare.
Sono d'accordo con te su Promtov, anche quando si dà all'IA la stessa richiesta, genera testi o codici diversi. Per questo motivo devi comunicare con lei come un bambino e spiegarle accuratamente cosa vuoi ottenere da lei. L'unica cosa è che voi, in qualità di programmatori con esperienza e competenza, più una formazione matematica, e quindi con lo stile di pensiero appropriato, potete formulare più chiaramente e brevemente un compito per l'IA, come un ToR. Molti trader non sono in grado di elaborare una RPT elementare per scrivere un semplice Expert Advisor. Quando ho iniziato a scrivere i primi Expert Advisor in MQL4, mi sono ricordato di come ci hanno insegnato all'università, ai tempi del Fortran, a disegnare prima un algoritmo del futuro programma e poi a scrivere il codice in base ad esso. Inoltre, come futuri ingegneri progettisti di sistemi radioelettronici, ci hanno insegnato a scrivere TOR, anch'esso utile.
 
Evgeniy Ilin #:

È meglio pensare al fatto che il calcolo dell'EMA iniziale non è uguale a quello dei successivi, perché è necessario salvare le barre fino a quando non si è in preda al panico e si ha bisogno di fare trading qui e ora. Per quanto riguarda i cicli, tutto funziona per barre, non ho notato alcun rallentamento. È possibile finalizzare i calcoli come si desidera per questo indicatore, ma vi darà molto ) So solo che nulla a tutti ).

Questo è il compito di chi scrive l'EMA: rendere tutti i calcoli successivi uguali a quelli precedenti. Non è necessario salvare le barre fino all'esaurimento, ma, come ho scritto sopra, è sufficiente un numero di barre 10-20 volte superiore al periodo.

La questione dei cicli è molto convincente... Naturalmente, non c'è alcuna differenza tra un ciclo di 10 barre e un ciclo di 100 barre... Soprattutto se si considera l'esistenza di algoritmi veloci per il calcolo delle medie.

 
Evgeniy Ilin #:

All'inizio non l'avevo notato)

   MqlTick last_tick;
   SymbolInfoTick(_Symbol,last_tick);
   
   
   // Determinare il valore dell'elemento 
   double point = SymbolInfoPoint(_Symbol); // видимо по аналогии придумано)))
   
   
 
Valeriy Yastremskiy #:

All'inizio non l'avevo notato)

SymbolInfoDouble(_Symbol,SYMBOL_POINT) - è così che dovrebbe essere. In generale, avete capito... Ho risolto la maggior parte degli errori. Avrei visto tutto se fosse stato il codice del mio ts. Ci sono dei difetti... e se non si sa cosa si sta facendo, è inutile. Sei sulla strada giusta. Spesso si sbaglia. C'è un motivo per cui ho scritto quell'articolo. Potrei fare un super prompt, che non sbaglierebbe un colpo e darebbe tutto alla perfezione, ma sarebbe inutile perché è tutto uno show-off. In condizioni reali sul campo poniamo semplici domande umane, che nel migliore dei casi possono essere più specifiche, ma come dimostra la pratica non riducono di molto la post-elaborazione.