Credo che Ilnar abbia avuto qualche difficoltà con i livelli di prezzo frattali. Ecco perché suggerisco di usare la mia funzione:
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 07.10.2006 |//| Описание : Поиск ближайшего фрактала. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий ТФ) |//| mode - тип фрактала (MODE_LOWER|MODE_UPPER) |//+----------------------------------------------------------------------------+doubleFindNearFractal(stringsy="0", inttf=0, intmode=MODE_LOWER){ if(sy=="" || sy=="0")sy=Symbol();
doublef=0;
intd=MarketInfo(sy, MODE_DIGITS), s;
if(d==0)if(StringFind(sy, "JPY")<0)d=4; elsed=2;
for(s=2; s<100; s++){ f=iFractals(sy, tf, mode, s);
if(f!=0)return(NormalizeDouble(f, d));
} Print("FindNearFractal(): Фрактал не найден");
return(0);
}
La funzione FindNearFractal() cerca il frattale più vicino del tipo specificato al simbolo specificato, al timeframe dato, e restituisce il suo livello di prezzo. Conoscendo il livello di prezzo della posizione del frattale, è già facile piazzare un ordine a quel livello.
È possibile che la funzione restituisca due valori, per esempio il numero della barra in cui si trova il frattale, o dobbiamo collegarne un altro?
xrust писал (а): È possibile che la funzione restituisca due valori, per esempio anche il numero della barra dove si trova il frattale, o devo collegarne un altro?
E perché restituire due valori quando uno - il numero della barra - è sufficiente? A tal fine, nella dichiarazione:
return(NormalizeDouble(f, d));
scrivere il valore del contatore a barre s invece del livello di prezzo. Sull'output otterrete il numero di barra del frattale. E otterrete il livello di prezzo con una delle funzioni iHigh () o iLow() a seconda del tipo di frattale.
ah... Beh, se in linea di principio, si può usare un array passato per riferimento. Allora il numero di parametri restituiti sarebbe limitato dalla dimensione dell'array.
Restituisce un flag per l'esistenza di un ordine con la dimensione del lotto specificata. True - l'ordine esiste (impostato), False - l'ordine non esiste (non impostato). Puoi limitare la lista degli ordini da controllare usando i parametri della funzione:
sy - Nome dello strumento. Se imposti questo parametro, la funzione controllerà solo gli ordini dello strumento specificato. NULL significa strumento corrente, e "" (di default) significa qualsiasi strumento.
op - Operazione, tipo di ordine in sospeso. Valori validi: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP o -1. Il valore predefinito di -1 indica qualsiasi tipo di ordine.
mn - Identificatore dell'ordine (MagicNumber). Il valore predefinito di -1 significa qualsiasi MagicNumber.
lo - Dimensione di un lotto con una precisione di due cifre decimali. Il valore predefinito è 0 - qualsiasi dimensione del lotto.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.11.2006 |//| Описание : Возвращает флаг существования ордера по размеру лота. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любой ордер) |//| mn - MagicNumber (-1 - любой магик) |//| lo - лот ( 0 - любой лот) |//+----------------------------------------------------------------------------+boolExistOrdersByLot(stringsy="", intop=-1, intmn=-1, doublelo=0){inti, k=OrdersTotal(), ot;
lo=NormalizeDouble(lo, 2);
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ot=OrderType();
if(ot>1 && ot<6){if((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)){if(mn<0 || OrderMagicNumber()==mn){if(lo<=0 || NormalizeDouble(OrderLots(), 2)==lo)return(True);
}}}}}return(False);
}
Restituisce la dimensione del lotto dell'ultimo ordine piazzato o -1. Puoi limitare la lista degli ordini da controllare usando i parametri della funzione:
sy - Nome dello strumento. Se questo parametro è dato, la funzione controllerà solo gli ordini dello strumento specificato. NULL significa lo strumento corrente, e "" (di default) significa qualsiasi strumento.
op - Operazione, tipo di ordine in sospeso. Valori validi: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP o -1. Il valore predefinito di -1 significa qualsiasi ordine.
mn - Identificatore dell'ordine (MagicNumber). Il valore predefinito -1 significa qualsiasi MagicNumber.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.11.2006 |//| Описание : Возвращает размер лота последнего выставленного ордера или -1 |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+doubleGetLotLastOrder(stringsy="", intop=-1, intmn=-1){datetimeo;
doublel=-1;
inti, k=OrdersTotal();
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()==sy || sy==""){if(OrderType()>1 && OrderType()<6){if(op<0 || OrderType()==op){if(mn<0 || OrderMagicNumber()==mn){if(o<OrderOpenTime()){o=OrderOpenTime();
l=OrderLots();
}}}}}}}return(l);
}
Restituisce il prezzo di impostazione dell'ultimo ordine aperto o 0. Puoi limitare la lista degli ordini da controllare con i parametri della funzione:
sy - Nome dello strumento. Se questo parametro è dato, la funzione controllerà solo gli ordini dello strumento specificato. NULL significa strumento corrente, e "" (di default) significa qualsiasi strumento.
op - Operazione, tipo di ordine in sospeso. Valori validi: OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP o -1. Il valore predefinito di -1 significa qualsiasi ordine.
mn - Identificatore dell'ordine (MagicNumber). Il valore predefinito -1 significa qualsiasi MagicNumber.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.11.2006 |//| Описание : Возвращает цену установки последнего ордера или 0. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+doubleGetOrderOpenPrice(stringsy="", intop=-1, intmn=-1){datetimet;
doubler=0;
inti, k=OrdersTotal();
if(sy=="0")sy=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()==sy || sy==""){if(OrderType()>1 && OrderType()<6){if(op<0 || OrderType()==op){if(mn<0 || OrderMagicNumber()==mn){if(t<OrderOpenTime()){t=OrderOpenTime();
r=OrderOpenPrice();
}}}}}}}return(r);
}
Ogni uomo ha il diritto alla sinistra... hee... Mi divertirò un po' con questo
Ilnar, nel topic Pending Fractal Orders, ha chiesto, Come fare ordini pendenti su frattali?
Credo che Ilnar abbia avuto qualche difficoltà con i livelli di prezzo frattali. Ecco perché suggerisco di usare la mia funzione:
La funzione FindNearFractal() cerca il frattale più vicino del tipo specificato al simbolo specificato, al timeframe dato, e restituisce il suo livello di prezzo. Conoscendo il livello di prezzo della posizione del frattale, è già facile piazzare un ordine a quel livello.
È possibile che la funzione restituisca due valori, per esempio anche il numero della barra dove si trova il frattale, o devo collegarne un altro?
No, è chiaro, sto praticamente chiedendo.
Funzione ExistOrdersByLot().
Restituisce un flag per l'esistenza di un ordine con la dimensione del lotto specificata. True - l'ordine esiste (impostato), False - l'ordine non esiste (non impostato). Puoi limitare la lista degli ordini da controllare usando i parametri della funzione:
Esempi di come usare la funzione ExistOrdersByLot().
In allegato, come al solito, c'è uno script funzionante con gli esempi di cui sopra.
Funzione GetLotLastOrder().
Restituisce la dimensione del lotto dell'ultimo ordine piazzato o -1. Puoi limitare la lista degli ordini da controllare usando i parametri della funzione:
Esempi di come usare GetLotLastOrder().
In allegato c'è uno script tradizionalmente funzionante con gli esempi di cui sopra.
Funzione GetOrderOpenPrice().
Restituisce il prezzo di impostazione dell'ultimo ordine aperto o 0. Puoi limitare la lista degli ordini da controllare con i parametri della funzione:
Esempi di come usare GetOrderOpenPrice().
In allegato c'è uno script perfettamente funzionante con gli esempi di cui sopra.