Caratteristiche utili da KimIV - pagina 63

 
KimIV >> :

non era... ha scritto...

La funzione ClosePosBySortLots().

Questa funzione chiude le posizioni in ordine di ordinamento per dimensione del lotto. Cioè, usando questa funzione, potete chiudere le posizioni in ordine crescente o decrescente di dimensioni dei lotti. La funzione ClosePosBySortLots() accetta i seguenti parametri opzionali:

  • sy - Nome dello strumento di trading. "" - qualsiasi strumento, NULL - strumento corrente. Il valore predefinito è "".
  • op - Tipo di operazione commerciale. Valori validi -1 - qualsiasi posizione, OP_BUY - comprare, OP_SELL - vendere. Il valore predefinito è -1.
  • mn - MagicNumber, identificatore unico dell'operazione commerciale. Valore predefinito -1 - qualsiasi numero magico.
  • sd - Direzione di ordinamento delle dimensioni del lotto. Valori validi MODE_ASCEND - ascendente, MODE_DESCEND - discendente. Il valore predefinito è MODE_DESCEND.

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

Grazie mille Igor. Pregherò per te:-)

 

Privat

rsi

Grazie per gli esempi!

Decifra questo se non ti dispiace:

var=Close[0]
Cosa fa?
 

er... fermati qui... Mi dispiace... cancellare... La creatività è sempre benvenuta!

e prendere il link alle funzioni dal file allegato...

File:
f_kimiv.rar  12 kb
 
WroC писал(а) >>

Per favore decodificate questo se non è difficile:

var=Chiusura[0]

Con cosa vuoi mangiarlo?

Alla variabile chiamata var viene assegnato il valore del livello di prezzo della chiusura della barra corrente (numero zero). Ma poiché la barra corrente non è ancora finita, Close[0] è lo stesso di Bid, cioè il prezzo corrente.

 

KimIV


E ho continuato a cercare di usare in qualche modo marketinfo che risulta essere ancora più semplice ....

 
if ( ExistPositions(NULL, OP_BUY, Magic)) {
 po= PriceOpenLastPos(NULL, OP_BUY, Magic);
 if (! ExistOrders (NULL, OP_SELLSTOP, Magic+1)
 && ! ExistPositions(NULL, OP_SELL , Magic+1)) {
 pp= po- offSet*Point;
 if ( StopLoss>0) sl= pp+ StopLoss*Point; else sl=0;
 if ( TakeProfit>0) tp= pp- TakeProfit*Point; else tp=0;
 SetOrder(NULL, OP_SELLSTOP, ll, pp, sl, tp, Magic+3);

Buon pomeriggio.
Igor, hai una funzione per implementare le tattiche di chiusura?
A pagina 45 hai dato un esempio che potrebbe essere usato per questo.

Ma un tale approccio limita il numero di ordini aperti a 1.
Se guardiamo l'esempio, sarebbe come questo
LockStep=20 dalla posizione aperta
LockStopLoss=10
1500 - open Buy\1480 - open sellstop

1470 - open buy\1450 - open sellstop

1460 - close sellstop 1450\open sellstop 1450
1490 - close sellstop 1480\opensellstop 1450
la funzione data aprirà due ordini sellstop 1450

P.S. Molte grazie per il vostro lavoro. Ci sono effettivamente molte informazioni ed è molto utile, ho preso la maggior parte di esse a bordo.



 
demsan писал(а) >>
Igor, hai una funzione per implementare le tattiche di chiusura?

No, non c'è una funzione separata. Quindi devi combinare quelli esistenti e magari aggiungerne alcuni tuoi. Vi consiglio di organizzare la seguente connessione: una coppia Buy/SellStop - un mago. La prossima coppia - il prossimo mago e così via.

 

La funzione StringLower().

Questa funzione converte una stringa in minuscolo. Tutti i caratteri SIGNIFICATIVI (grandi) diventano minuscoli (piccoli). La funzione StringLower() accetta un solo parametro obbligatorio: la stringa in ingresso.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает строку в нижнем регистре                            |
//+----------------------------------------------------------------------------+
string StringLower(string s) {
  int c, i, k=StringLen( s), n;
  for ( i=0; i< k; i++) {
    n=0;
    c=StringGetChar( s, i);
    if ( c>64 && c<91) n= c+32;     // A-Z -> a-z
    if ( c>191 && c<224) n= c+32;   // А-Я -> а-я
    if ( c==168) n=184;            //  Ё  ->  ё
    if ( n>0) s=StringSetChar( s, i, n);
  }
  return( s);
}

SZY. In allegato c'è uno script per testare la funzione StringLower().

File:
 

La funzione StringUpper().

Questa funzione converte la stringa in maiuscolo. Tutti i caratteri minuscoli (piccoli) diventano maiuscoli (grandi). La funzione StringUpper() accetta un solo parametro obbligatorio: la stringa in ingresso.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает строку в ВЕРХНЕМ регистре                           |
//+----------------------------------------------------------------------------+
string StringUpper(string s) {
  int c, i, k=StringLen( s), n;
  for ( i=0; i< k; i++) {
    n=0;
    c=StringGetChar( s, i);
    if ( c>96 && c<123) n= c-32;    // a-z -> A-Z
    if ( c>223 && c<256) n= c-32;   // а-я -> А-Я
    if ( c==184) n=168;            //  ё  ->  Ё
    if ( n>0) s=StringSetChar( s, i, n);
  }
  return( s);
}

ZS. In allegato c'è uno script per testare StringUpper().

File:
 

La funzione StringToArrayDouble().

Questa funzione divide la stringa in numeri reali, e ogni numero viene aggiunto all'array come elemento separato. Quanti numeri reali appaiono nella stringa, lo stesso numero di elementi sarà aggiunto all'array. Un punto e virgola è riconosciuto come separatore. La funzione StringToArrayDouble() restituisce il numero di elementi dell'array e prende i seguenti parametri obbligatori:

  • st - Una stringa di numeri reali separati da un punto e virgola.
  • ad - Matrice di numeri reali.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.10.2008                                                     |
//|  Описание : Перенос вещественных чисел из строки в массив                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    st - строка вещественных чисел через точку с запятой                    |
//|    ad - массив вещественных чисел                                          |
//+----------------------------------------------------------------------------+
//|  Возврат:                                                                  |
//|    Количество элементов в массиве                                          |
//+----------------------------------------------------------------------------+
int StringToArrayDouble(string st, double& ad[]) {
  int    i=0, np;
  string stp;

  ArrayResize( ad, 0);
  while (StringLen( st)>0) {
    np=StringFind( st, ";");
    if ( np<0) {
      stp= st;
      st="";
    } else {
      stp=StringSubstr( st, 0, np);
      st=StringSubstr( st, np+1);
    }
    i++;
    ArrayResize( ad, i);
    ad[ i-1]=StrToDouble( stp);
  }
  return(ArraySize( ad));
}

ZS. In allegato c'è uno script per testare la funzione StringToArrayDouble().