Caratteristiche utili da KimIV - pagina 58

 

Ciao Igor,

Potreste dirmi quale operatore sostituire questo in mql4 - OrderValue(cnt,VAL_TYPE)=OP_BUY (mql3).

Grazie in anticipo.

 
Potete consigliarmi come chiudere un ordine al prezzo di chiusura della barra corrente? Cioè la barra si chiude insieme all'ordine.
 

Ciao Igor.

Ho guardato attraverso tutte le funzioni e gli operatori - non riesco a trovare, e se c'è, non riesco a vedere la funzione che modificherebbe tutte le posizioni aperte,

che modificherebbe tutte le posizioni aperte in una volta sola, invece di una posizione selezionata ad ogni tick.

Se non le dispiace, la prego di avvisarmi.

 
KimIV >> :

In questo thread posterò i codici delle mie funzioni in MQL4, darò esempi del loro uso, e risponderò alle domande relative al loro uso. Ogni funzione sarà pubblicata in due post. Il primo post conterrà il codice della funzione, il secondo - esempi di utilizzo e brevi spiegazioni. A volte allegherò il codice di uno script al secondo post per testare effettivamente la funzione e visualizzare i risultati.

Inizierò con le funzioni per gestire gli ordini come richiesto da Lukyanov nel topic "Come eseguire due EAs allo stesso tempo" alla fine.

Lasciamo che la prima funzione sia la funzione di impostazione degli ordini (versione per MT4 tester):

Ciao Igor, hai familiarità con AlterTrader? Se sì, potresti dirmi le risposte a 3 o 4 delle mie domande?

 
ipm писал(а) >>
Igor. Buongiorno.
Puoi disegnare un semplice problema per te:
impostare a quale valore di prezzo la linea di segnale attraverserà il MACD, o in altre parole l'istogramma MACD diventerà uguale a zero.

Ciao Oleg!

Non ho risolto tali problemi nella pratica. E teoricamente, ho una vaga idea di come farlo. Probabilmente, i valori makdac sono presi come x e il prezzo come x e poi la funzione y=f(x) rappresenterà la dipendenza dei valori makdac dal prezzo. Se fosse così semplice, potremmo invertire la funzione y=f(x) esprimendo x attraverso ypc x=F(y). Ma la difficoltà è che la funzione y=f(x) dipende da più di una x. Ho saltato queste lezioni all'università :-)

 
Duke3D писал(а) >>

Ciao Igor,

Potreste dirmi quale operatore sostituire questo in mql4 - OrderValue(cnt,VAL_TYPE)=OP_BUY (mql3).

Grazie in anticipo.

Apparentemente sarà OrderType().

 
mozg писал(а) >>
Potete per favore consigliarmi come chiudere l'ordine al prezzo di chiusura della barra corrente? Cioè la barra si chiude insieme all'ordine.
static datetime prevTimeOpen=0
if ( prevTimeOpen>0 && prevTimeOpen<Time[0]) {
  for ( цикл перебора позиций) {
    if ( выбрана позиция, которую надо закрыть) {
      OrderClose(...);
    }
  }
}
prevTimeOpen=Time[0];
 
amur писал(а) >>

Ciao Igor.

Ho guardato attraverso tutte le funzioni e gli operatori - non riesco a trovare, e se c'è, non riesco a vedere la funzione che modificherebbe tutte le posizioni aperte,

Se c'è, non riesco a vedere una funzione che modifichi tutte le posizioni aperte in una volta, invece di una selezionata ad ogni tick.

Se non vi dispiace - per favore avvisate.

Non credo che tali azioni siano appropriate. Dopo tutto, ogni posizione ha di solito parametri individuali. Quindi ne selezioni uno, uno specifico...

E cosa vuoi modificare esattamente?

 

Funzione NameDayOfWeek()

Restituisce il nome del giorno della settimana in base al numero passato come parametro:

  • ndw - Numero del giorno della settimana. Parametro richiesto.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование дня недели                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ndw - номер дня недели                                                  |
//+----------------------------------------------------------------------------+
string NameDayOfWeek(int ndw) {
  if ( ndw==0) return("Воскресенье");
  if ( ndw==1) return("Понедельник");
  if ( ndw==2) return("Вторник");
  if ( ndw==3) return("Среда");
  if ( ndw==4) return("Четверг");
  if ( ndw==5) return("Пятница");
  if ( ndw==6) return("Суббота");
}
 

La funzione NormalizeLot().

Questa funzione restituisce il valore normalizzato del lotto scambiato. Oltre alla normalizzazione, la funzione adatta la dimensione del lotto ai limiti specificati dal centro di negoziazione (vengono controllati i valori minimi e massimi del lotto e il passo di cambiamento del lotto). La funzione NormalizeLot() accetta i seguenti parametri:

  • lo - Valore di NormalizeLot. Parametro richiesto.
  • ro - Metodo di arrotondamento. Falso - al lato minore, Vero - al lato maggiore. Valore predefinito - Falso - al lato inferiore.
  • sy - Nome dello strumento commerciale. NULL o "" - simbolo corrente. Valore predefinito - "".
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot(double lo, bool ro= False, string sy="") {
  double l, k;
  if ( sy=="" || sy=="0") sy=Symbol();
  double ls=MarketInfo( sy, MODE_LOTSTEP);
  double ml=MarketInfo( sy, MODE_MINLOT);
  double mx=MarketInfo( sy, MODE_MAXLOT);

  if ( ml==0) ml=0.1;
  if ( mx==0) mx=100;

  if ( ls>0) k=1/ ls; else k=1/ ml;
  if ( ro) l=MathCeil( lo* k)/ k; else l=MathFloor( lo* k)/ k;

  if ( l< ml) l= ml;
  if ( l> mx) l= mx;

  return( l);
}

SZZ. In allegato c'è uno script per testare la funzione NormalizeLot().

File: