Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1329

 
Tanita Gajduchok:
Ciao, come si fa a fare una classifica qui?

top?

 
Saluti!

Come scrivere una funzione come questa:

La somma del volume delle candele ascendenti dovrebbe essere 2 volte la somma del volume discendente, ad esempio per le ultime 10 barre.

Come quello dello screenshot.


File:
IMG_9206.PNG  87 kb
 

Buon pomeriggio a tutti. Sto cercando di allegare un calcolo della dimensione del lotto alla macchina Grail, in modo che il lotto sia impostato come una percentuale del deposito in caso di perdita. In altre parole, se scatta uno stop loss, la percentuale specificata del deposito viene persa, o se il deposito è piccolo per questa percentuale, allora il lotto viene impostato al minimo possibile per il broker... Ho trovato uno script su qualche sito che fa queste cose e ho trasferito il codice dello script a me, ma il lotto non viene considerato correttamente... Ho fatto così. Nelle variabili di input ho dichiarato una variabile responsabile del rischio massimo.

extern int MaxRisk=1;// МАКСИМАЛЬНЫЙ % УБЫТКА ПРИ СТОП ЛОССЕ?

Poi dichiaro delle variabili nel tick on. Una variabile che memorizza la quantità di fondi liberi nel conto. Una variabile del valore di un punto di un simbolo. Una variabile del lotto minimo di un broker. Una variabile che memorizza il valore del lotto massimo al broker. E la variabile che memorizza il passo della dimensione del lotto.

  double Free =AccountFreeMargin();// ПОЛУЧАЕМ СВОБОДНЫЕ СРЕДССТВА ДЛЯ РАСЧЁТА ОБЪЁМА ЛОТА
  double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE); //СТОИМОСТЬ 1 ПУНКТА
  double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);   // МИНИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);     // МАКСИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);    // ШАГ ИЗМЕНЕНИЯ РАЗМЕРА ЛОТА

E poi si calcola il volume del lotto con un dato rischio ad un certo stop loss. Stop Loss è calcolato da atp o fisso in pip - questo calcolo funziona correttamente perché se metto un lotto fisso allora tutto è ben aperto e funziona. La formula per calcolare il volume del lotto è la seguente.

double lot =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА, КОТОРУЮ Я СОВСЕМ НЕ ПОНИМАЮ((((
  if(lot<Min_Lot) lot=Min_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ МЕНЬШЕ ЧЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ЛОТ ПРИСВАЕМАЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА
if(lot>Max_Lot) lot=Max_Lot;  //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ БОЛЬШЕ ЧЕМ МАКСИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ОЛТ ПРИСВАЕВАЕМ МАКС ЛОТ У БРОКЕРА

 


Dopo tutti i calcoli attraverso il valore del lotto di stampa per visualizzarlo.

Print("ЛОТ ДО НОРМАЛИЗАЦИИ= "+lot);
 lot=NormalizeDouble(lot,Digits());
Print("ЛОТ ПОСЛЕ НОРМАЛИЗАЦИИ= "+lot);

Cosa viene visualizzato nel diario di bordo cosa viene registrato per lotto e stop - i valori di stop sono corretti ma il lotto no((((

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Информация о счете - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
DanilaMactep:

Buon pomeriggio a tutti. Sto cercando di allegare un calcolo della dimensione del lotto alla macchina Grail, in modo che il lotto sia impostato come una percentuale del deposito in caso di perdita. In altre parole, se scatta uno stop loss, la percentuale specificata del deposito viene persa, o se il deposito è piccolo per questa percentuale, allora il lotto viene impostato al minimo possibile per il broker... Ho trovato uno script su qualche sito che fa queste cose e ho trasferito il codice dello script a me, ma il lotto non viene considerato correttamente... Ho fatto così. Nelle variabili di input ho dichiarato una variabile responsabile del rischio massimo.

Poi dichiaro delle variabili nel tick on. Una variabile che memorizza la quantità di fondi liberi nel conto. Una variabile del valore di un punto di un simbolo. Una variabile del lotto minimo di un broker. Una variabile che memorizza il valore del lotto massimo al broker. E la variabile che memorizza il passo di dimensione del lotto.

E poi si calcola il volume del lotto con un dato rischio ad un certo stop loss. Stop Loss è calcolato da atp o fisso in pip - questo calcolo funziona correttamente perché se metto un lotto fisso allora tutto è ben aperto e funziona. La formula per calcolare il volume del lotto è la seguente.


Dopo tutti questi calcoli stampo il valore del lotto per controllarlo.

Ciò che è stampato nel diario di bordo può essere visto a ***

A prima vista, la funzione sembra essere OK. L'unica cosa che dovresti mettere nella formula non è il prezzo dell'ordine stoploss ma la distanza dall'apertura dell'ordine allo stop in punti.

Poi abbiamo bisogno di normalizzare il lotto alla precisione, non _Digits ma a Step - (passo incrementale della dimensione del lotto). La stampa dovrebbe essere emessa attraverso DoubleToString() con la stessa precisione, poi si vedrà ciò che si vuole vedere.

 
DanilaMactep:

Buon pomeriggio a tutti. Sto cercando di inserire un calcolo delle dimensioni del lotto nella macchina del Graal,

Ho fatto questo

Order_Lots = NormalizeDouble((AccountBalance()/100*Percen)/(MarketInfo(Symbol(),MODE_TICKVALUE)*Stop_Point)-0.005,2);
 
Alexey Viktorov:

A prima vista la funzione sembra buona. L'unica cosa che dovremmo aggiungere alla formula è la distanza in punti dall'apertura dell'ordine allo stop, piuttosto che il prezzo stoploss dell'ordine.

Inoltre: dovremmo normalizzare il lotto alla precisione, non a _Digits ma a Step - (passo incrementale della dimensione del lotto) e si dovrebbe emettere su Print usando DoubleToString() con la stessa precisione.

La mia matematica non è molto buona - come calcolare la distanza dall'apertura dell'ordine allo stop e sostituire sl con questo?

DoubleToString("ЛОТ ПОСЛЕ НОРМАЛИЗАЦИИ= "+lot);// ВЫВОД ЗНАЧЕНИЯ ЛОТА
Anormalizzato il valore del lotto in questo modo
lot=NormalizeDouble(lot,Step);// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ ЛОТА 

Quindi, resta da vedere come calcolare la distanza dalla posizione aperta allo stop nel codice.

 
DanilaMactep:

Quindi resta da vedere come calcolare la distanza dall'apertura allo stop nel codice?

if(buy)
Stop_Point= (Pric_UP-Loss_UP)/Point+Spread; 
else
Stop_Point= (Loss_DN-Pric_DN)/Point+Spread; 
 
MakarFX:

Grazie mille per il pezzo di codice, ma la domanda ora è quale tipo dichiarare le variabili in questo pezzo di codice e quali valori assegnare loro? Non sono un mago, sto solo imparando.

 
DanilaMactep:

Grazie mille per il pezzo di codice, ma la domanda ora è quali tipi dichiarare le variabili in questo pezzo di codice e quali valori assegnare loro? Non sono un mago, sto solo imparando

Pric_UP

prezzo aperto per comprare

Loss_UP

comprare prezzo stop loss

   Spread = StrToInteger(DoubleToString(MarketInfo(Symbol(),MODE_SPREAD),0));
diffusione
 
Порт-моне тв:
Saluti!

Come scrivere una funzione come questa:

La somma del volume delle candele ascendenti dovrebbe essere 2 volte la somma del volume discendente, ad esempio per le ultime 10 barre.

Come quello dello screenshot.


Qualcuno può aiutarmi?

Motivazione: