[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 621
:) Ora è apparso l'errore 130. La cosa più strana è che con gli stop sbagliati (130) imposta ancora il takei corretto (calcolato da ATR), ma i miei stop non erano impostati dall'inizio... C'è un modo per capirlo?
Ho bisogno di aiuto!!! Come scegliere l'ultimo ordine perdente dalla cronologia?
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает флаг убыточности последней позиции. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isLossLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
int i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderProfit()<0) return(True);
}
return(False);
}
if (isLossLastPos(NULL, -1, Magic искомого ордера)) {нашли - обрабатываем...}
È un po' troppo complicato per te :)) Ecco il mio codice
Passare nel metodo come parametri un medjack ritardato e un trall auspicabile.
Non riesco a capire perché la tua funzione dà errore 1 (divertente: errore 1 = nessun errore, ma risultato sconosciuto) e non fa il trawl. A volte potrebbe catturare qualche ritardo, ma per lo più >>>ERROR1 nel log e non tossire...
Ecco come faccio io:
//==============================================================================================// Модификация ордеров//============================================================================================== int criterion = TakeProfitATR (1); // Рассчитываем "достаточную" волатильность
if (criterion>=15) trailingOrder(511, 20); // и если она в "норме" - тралим ордера...
//==============================================================================================// Функция для рассчёта Take Profit по ATR//+------------------------------------------------------------------+//| Take from ATR |//+------------------------------------------------------------------+double TakeProfitATR (int tf)
{
double atr =iATR(NULL,tf,14,0);
double mltp =15000;
if (tf==1) mltp=15000;
if (tf==5) mltp=45000;
double tp =MathRound(atr*mltp);
return (tp);
}
Non riesco a capire perché la tua funzione dà errore 1 (divertente: errore 1 = nessun errore, ma risultato sconosciuto) e non fa il trawl. A volte potrebbe catturare qualche errore in sospeso, ma la maggior parte delle volte >>>ERROR1 è nel log e non tossisce...
Io lo chiamo così:
L'errore 1 può apparire a causa di questo (da OrderModify() doc):
Se vengono passati valori invariati come parametri della funzione, allora verrà generato l'errore 1 (ERR_NO_RESULT).
Quindi va bene, non c'è davvero nessun errore, potete ignorarlo.
Non riesco a capire perché la tua funzione dà errore 1 (divertente: errore 1 = nessun errore, ma risultato sconosciuto) e non traina. A volte potrebbe catturare qualche errore in sospeso, ma la maggior parte delle volte >>>ERROR1 è nel log e non tossisce...
Ecco come faccio io:
Ho aggiunto Limit'order (nell'ultimo codice mi sono dimenticato di loro :)) + l'elaborazione dell'errore #1 (prima della modifica il nuovo prezzo viene confrontato con quello attuale, se sono uguali, allora non fare nulla):
//+------------------------------------------------------------------+void trailingOrder(int magic, int trailing){
int index = 0;
while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
if(OrderMagicNumber() == magic){
if(OrderType() == OP_BUYSTOP){
if(OrderOpenPrice() - Ask > Point*trailing){
if((Ask+Point*trailing) - Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
(Ask+Point*trailing) - Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
(Ask+Point*trailing) != OrderOpenPrice()){
if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
}else{
Print(">>> Слишком близко к рынку или передано неизмененное значение!");
}
}
return;
}
if(OrderType() == OP_SELLSTOP){
if(Bid - OrderOpenPrice() > Point*trailing){
if(Bid - (Bid-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
Bid - (Bid-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
(Bid-Point*trailing) != OrderOpenPrice()){
if(!OrderModify(OrderTicket(),Bid-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
}else{
Print(">>> Слишком близко к рынку или передано неизмененное значение!");
}
}
return;
}
if(OrderType() == OP_SELLLIMIT){
if(OrderOpenPrice() - Bid > Point*trailing){
if((Bid+Point*trailing) - Bid >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
(Bid+Point*trailing) - Bid > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
(Bid+Point*trailing) != OrderOpenPrice()){
if(!OrderModify(OrderTicket(),Bid+Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
}else{
Print(">>> Слишком близко к рынку или передано неизмененное значение!");
}
}
return;
}
if(OrderType() == OP_BUYLIMIT){
if(Ask - OrderOpenPrice() > Point*trailing){
if(Ask - (Ask-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
Ask - (Ask-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
(Ask-Point*trailing) != OrderOpenPrice()){
if(!OrderModify(OrderTicket(),Ask-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
}else{
Print(">>> Слишком близко к рынку или передано неизмененное значение!");
}
}
return;
}
}
index++;
}
}
//+------------------------------------------------------------------+
Sì.
C'è un modo per capirlo?
Ho bisogno di aiuto!!! Come scegliere l'ultimo ordine perdente dalla cronologia?
È un po' troppo complicato per te :))
Passare nel metodo come parametri un medjack ritardato e un trall auspicabile.Ecco il mio codice
Non riesco a capire perché la tua funzione dà errore 1 (divertente: errore 1 = nessun errore, ma risultato sconosciuto) e non fa il trawl. A volte potrebbe catturare qualche ritardo, ma per lo più >>>ERROR1 nel log e non tossire...
Ecco come faccio io:
Non riesco a capire perché la tua funzione dà errore 1 (divertente: errore 1 = nessun errore, ma risultato sconosciuto) e non fa il trawl. A volte potrebbe catturare qualche errore in sospeso, ma la maggior parte delle volte >>>ERROR1 è nel log e non tossisce...
Io lo chiamo così:
L'errore 1 può apparire a causa di questo (da OrderModify() doc):
Se vengono passati valori invariati come parametri della funzione, allora verrà generato l'errore 1 (ERR_NO_RESULT).
Non riesco a capire perché la tua funzione dà errore 1 (divertente: errore 1 = nessun errore, ma risultato sconosciuto) e non traina. A volte potrebbe catturare qualche errore in sospeso, ma la maggior parte delle volte >>>ERROR1 è nel log e non tossisce...
Ecco come faccio io:
Ho aggiunto Limit'order (nell'ultimo codice mi sono dimenticato di loro :)) + l'elaborazione dell'errore #1 (prima della modifica il nuovo prezzo viene confrontato con quello attuale, se sono uguali, allora non fare nulla):
A proposito, ho trovato un errore nel tutorial sulle distanze StopLevel e FreezeLevel per i pendenti:
Limitazione della distanza minima di StopLevel.
L'operazione di compravendita non viene eseguita se uno di questi requisiti viene violato.
SellLimit è impostato sopra il prezzo corrente, quindi questo è corretto:
OpenPrice - Bid ≥ StopLevel
c'è un modo per ordinare gli strumenti nelle schede nella parte inferiore dello schermo? perché 8 strumenti in 4 timeframes sono sparsi in un mess....
c'è un modo per ordinare gli strumenti nelle schede nella parte inferiore dello schermo? perché 8 strumenti in 4 timeframes sono sparsi in un mess....
prendere la scheda con il nome del grafico e trascinarla al posto giusto