Chiude una posizione preselezionata. Questa funzione è piuttosto ausiliaria, perché è chiamata da diverse altre funzioni, che aiutano a selezionare le posizioni da chiudere in base ad alcune condizioni.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание: Закрытие одной предварительно выбранной позиции |//+----------------------------------------------------------------------------+voidClosePosBySelect(){boolfc;
colorclClose;
doublell, pa, pb, pp;
interr, it;
if(OrderType()==OP_BUY || OrderType()==OP_SELL){for(it=1; it<=NumberOfTry; it++){if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))break;
while(!IsTradeAllowed())Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if(OrderType()==OP_BUY){pp=pb; clClose=clCloseBuy;
}else{pp=pa; clClose=clCloseSell;
}ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if(fc){if(UseSound)PlaySound(NameFileSound); break;
}else{err=GetLastError();
if(err==146)while(IsTradeContextBusy())Sleep(1000*11);
Print("Error(",err,") Close ",GetNameOP(OrderType()),"",
ErrorDescription(err),", try ",it);
Print(OrderTicket()," Ask=",pa," Bid=",pb," pp=",pp);
Print("sy=",OrderSymbol()," ll=",ll," sl=",OrderStopLoss(),
" tp=",OrderTakeProfit()," mn=",OrderMagicNumber());
Sleep(1000*5);
}}}elsePrint("Некорректная торговая операция. Close ",GetNameOP(OrderType()));
}
Chiude una posizione preselezionata. Questa funzione è piuttosto ausiliaria perché è chiamata da diverse altre funzioni che aiutano a selezionare le posizioni da chiudere secondo alcune condizioni.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание: Закрытие одной предварительно выбранной позиции |//+----------------------------------------------------------------------------+voidClosePosBySelect(){boolfc;
colorclClose;
doublell, pa, pb, pp;
interr, it;
if(OrderType()==OP_BUY || OrderType()==OP_SELL){for(it=1; it<=NumberOfTry; it++){if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))break;
while(!IsTradeAllowed())Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if(OrderType()==OP_BUY){pp=pb; clClose=clCloseBuy;
}else{pp=pa; clClose=clCloseSell;
}ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if(fc){if(UseSound)PlaySound(NameFileSound); break;
}else{err=GetLastError();
if(err==146)while(IsTradeContextBusy())Sleep(1000*11);
Print("Error(",err,") Close ",GetNameOP(OrderType()),"",
ErrorDescription(err),", try ",it);
Print(OrderTicket()," Ask=",pa," Bid=",pb," pp=",pp);
Print("sy=",OrderSymbol()," ll=",ll," sl=",OrderStopLoss(),
" tp=",OrderTakeProfit()," mn=",OrderMagicNumber());
Sleep(1000*5);
}}}elsePrint("Некорректная торговая операция. Close ",GetNameOP(OrderType()));
}
Ciao!
Mi scusi!
1) Non capisco il significato della linea for(it=1; it<=NumberOfTry; it++)
che tipo di loop è questo?
2) Non capisco anche la condizione if (!testing() ......) break;
3) e infine, che funzione è questa? ErrorDescription(err)," ,
1. questo è un ciclo di tentativi di commercio. Se il server commerciale restituisce errori, la funzione farà un numero di tent ativi per chiudere la posizione dopo tutto. Di solito imposto NumberOfTry=5.
2. questa condizione implementa la capacità di uscire correttamente dal ciclo di tentativi quando l 'Expert Advisor che lavora online viene fermato. Senza questa condizione, per chiamare, per esempio, le proprietà dell'EA, dovevamo aspettare che l'EA utilizzasse tutti i tentativi di trade, o rimuovere l'EA dal grafico.
3. Guarda nel file ..■experts\libraries\stdlib.mq4
Questa funzione chiude solo le posizioni per le quali il profitto nella valuta di deposito supera un certo valore specificato. Potete specificare quali posizioni devono essere chiuse usando i parametri della funzione:
sy - Nome dello strumento. Se impostate questo parametro, la funzione controllerà solo le posizioni dello strumento specificato. NULL significa lo strumento corrente, e "" (di default) significa qualsiasi strumento.
op - operazione commerciale, tipo di posizione. Valori validi: OP_BUY, OP_SELL o -1. Il valore predefinito -1 significa qualsiasi posizione.
mn - Identificatore di posizione (MagicNumber). Valore predefinito -1 - significa qualsiasi MagicNumber.
pr - Livello di profitto nella valuta di deposito. Valore predefinito - 0.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Закрытие тех позиций, у которых профит в валюте депозита |//| превысил некоторое значение |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| pr - профит |//+----------------------------------------------------------------------------+voidClosePosBySizeProfitInCurrency(stringsy="", intop=-1, intmn=-1, doublepr=0){inti, k=OrdersTotal();
if(sy=="0")sy=Symbol();
for(i=k-1; i>=0; i--){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)){if(OrderType()==OP_BUY || OrderType()==OP_SELL){if(mn<0 || OrderMagicNumber()==mn){if(OrderProfit()+OrderSwap()>pr)ClosePosBySelect();
}}}}}}
Igor, ti ho fatto una domanda nella 'Libreria di funzioni per lavorare con i file INI', ma non c'è stata risposta :(
Grazie... ha risposto...
La funzione ClosePosBySelect().
Chiude una posizione preselezionata. Questa funzione è piuttosto ausiliaria, perché è chiamata da diverse altre funzioni, che aiutano a selezionare le posizioni da chiudere in base ad alcune condizioni.
Grazie... ha risposto...
Un'altra domanda (o piuttosto affermazione) anche lì :)
La funzione ClosePosBySelect().
Chiude una posizione preselezionata. Questa funzione è piuttosto ausiliaria perché è chiamata da diverse altre funzioni che aiutano a selezionare le posizioni da chiudere secondo alcune condizioni.
Ciao!
Mi scusi!
1) Non capisco il significato della linea for (it=1; it<=NumberOfTry; it++)
che tipo di loop è questo?
2) Non capisco anche la condizione if (!testing() ......) break;
3) e infine, che funzione è questa? ErrorDescription(err)," ,
Se non le dispiace, mi spieghi.
1. questo è un ciclo di tentativi di commercio. Se il server commerciale restituisce errori, la funzione farà un numero di tent ativi per chiudere la posizione dopo tutto. Di solito imposto NumberOfTry=5.
2. questa condizione implementa la capacità di uscire correttamente dal ciclo di tentativi quando l 'Expert Advisor che lavora online viene fermato. Senza questa condizione, per chiamare, per esempio, le proprietà dell'EA, dovevamo aspettare che l'EA utilizzasse tutti i tentativi di trade, o rimuovere l'EA dal grafico.
3. Guarda nel file ..■experts\libraries\stdlib.mq4
Vorrei chiedere come far lavorare un EA in un ciclo infinito, ma con accesso alle impostazioni dei suoi parametri?
Ho scritto all'inizio così
Ma in questo caso, l'Expert Advisor si blocca e non posso fare nulla con esso tranne che rimuoverlo dal grafico
Valera, fa che sia così:
La funzione ClosePosBySizeProfitInCurrency().
Questa funzione chiude solo le posizioni per le quali il profitto nella valuta di deposito supera un certo valore specificato. Potete specificare quali posizioni devono essere chiuse usando i parametri della funzione:
Valera, fa che sia così:
Ahimè, questo trasmette anche l'ekspert e non dà accesso ai suoi parametri finché non lo si rimuove dal grafico
Ahimè, questo trasmette anche l'EA e non dà accesso ai suoi parametri fino a quando non lo si rimuove dal grafico
Tuttavia, ti dà la possibilità di fermare l'EA premendo il pulsante 'EAs' sulla barra degli strumenti.