L'altro giorno avevo bisogno di una funzione per il mio pannello informativo che restituisse il profitto/perdita stimato nella valuta del deposito quando un gruppo di posizioni ha attivato i loro stop. Beh, non è la prima volta che scrivo una funzione del genere. L'ho testato a lungo e duramente in diverse società di intermediazione e su diversi strumenti con diversi modi di calcolo dei profitti. Se non lo sai, ce ne sono tre: Forex, CFD e Futures. Ma non riesco a trovare la differenza tra Forexe Futures, ma ho comunque incluso la possibilità di un calcolo diverso nel codice. La perdita massima che può essere restituita dalla funzione è limitata artificialmente dal saldo del conto corrente. Tradizionalmente, potete passare dei parametri alla funzione e quindi filtrare le posizioni di cui avete bisogno per l'analisi:
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). Il valore predefinito -1 significa qualsiasi MagicNumber.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 03.05.2012 |//| Описание : Возвращает предполагаемую прибыль/убыток в валюте депозита |//| в случае срабатывания стопа открытых позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+double ProfitIFStopInCurrency(string sy="", int op=-1, int mn=-1) {
if (sy=="0") sy=Symbol(); // Текущий символint i, k=OrdersTotal(); // Подсчёт открытых позицийint m; // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futuresdouble l; // Размер контракта в базовой валюте инструментаdouble p; // Размер пункта в валюте котировкиdouble t; // Минимальный шаг изменения цены инструмента в валюте котировкиdouble v; // Размер минимального изменения цены инструмента в валюте депозитаdouble s=0; // Подсчёт стопа в валюте депозитаfor (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op)) {
l=MarketInfo(OrderSymbol(), MODE_LOTSIZE);
m=MarketInfo(OrderSymbol(), MODE_PROFITCALCMODE);
p=MarketInfo(OrderSymbol(), MODE_POINT);
t=MarketInfo(OrderSymbol(), MODE_TICKSIZE);
v=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
if (OrderType()==OP_BUY) {
if (m==0) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots();
if (m==1) s-=(OrderOpenPrice()-OrderStopLoss())/p*v/t/l*OrderLots();
if (m==2) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots();
s+=OrderCommission()+OrderSwap();
}
if (OrderType()==OP_SELL) {
if (OrderStopLoss()>0) {
if (m==0) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots();
if (m==1) s-=(OrderStopLoss()-OrderOpenPrice())/p*v/t/l*OrderLots();
if (m==2) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots();
s+=OrderCommission()+OrderSwap();
} else s=-AccountBalance();
}
}
}
}
}
if (AccountBalance()+s<0) s=-AccountBalance(); // Ограничение убытка балансом счётаreturn(s);
}
HH. In allegato lo script per testare la funzione ProfitIFStopInCurrency().
Questa funzione è simile alla precedente, solo che restituisce il profitto/perdita stimato nella valuta del deposito quando un gruppo di posizioni ha attivato la loro presa. Viene anche preso in considerazione il metodo di calcolo del profitto: Forex, CFD e Futures .Il massimo profitto che la funzione può restituire è limitato artificialmente dal numero 999.999.999. Parametri:
sy - Nome dello strumento. Se si specifica questo parametro, la funzione controllerà solo le posizioni dello strumento specificato. NULL significa lo strumento corrente, e "" (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). Il valore predefinito -1 significa qualsiasi MagicNumber.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 03.05.2012 |//| Описание : Возвращает предполагаемую прибыль/убыток в валюте депозита |//| в случае срабатывания тейка открытых позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+double ProfitIFTakeInCurrency(string sy="", int op=-1, int mn=-1) {
if (sy=="0") sy=Symbol(); // Текущий символint i, k=OrdersTotal(); // Подсчёт открытых позицийint m; // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futuresdouble l; // Размер контракта в базовой валюте инструментаdouble p; // Размер пункта в валюте котировкиdouble t; // Минимальный шаг изменения цены инструмента в валюте котировкиdouble v; // Размер минимального изменения цены инструмента в валюте депозитаdouble s=0; // Подсчёт стопа в валюте депозитаfor (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op)) {
l=MarketInfo(OrderSymbol(), MODE_LOTSIZE);
m=MarketInfo(OrderSymbol(), MODE_PROFITCALCMODE);
p=MarketInfo(OrderSymbol(), MODE_POINT);
t=MarketInfo(OrderSymbol(), MODE_TICKSIZE);
v=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
if (OrderType()==OP_BUY) {
if (OrderTakeProfit()>0) {
if (m==0) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v*OrderLots();
if (m==1) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v/t/l*OrderLots();
if (m==2) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v*OrderLots();
s+=OrderCommission()+OrderSwap();
} else s=999999999;
}
if (OrderType()==OP_SELL) {
if (m==0) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v*OrderLots();
if (m==1) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v/t/l*OrderLots();
if (m==2) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v*OrderLots();
s+=OrderCommission()+OrderSwap();
}
}
}
}
}
return(s);
}
Ho allegato uno script per testare la funzione ProfitIFTakeInCurrency().
Ciao, non avete una sorta di modello (per i principianti) per rendere più facile scrivere un EA per il tester e per il trading reale. Qualcosa non si muove ((((
Chuma: Ciao, non avete una sorta di modello (per i principianti) per rendere più facile scrivere un EA per il tester e per il trading reale. Qualcosa non si muove ((((
Template? :)) Beh, prendete uno qualsiasi dei miei EA come punto di partenza...
KimIV: Template? :)) Quindi prendete uno qualsiasi dei miei EA come punto di partenza...
Grazie.... cose interessanti e utili in generale.... ma per ora ho intenzione di creare un consulente di trading che aprirebbe e chiuderebbe posizioni basate sui segnali più semplici (incrociando le medie per esempio) per cominciare, ma tutti questi controlli, determinando il lotto ecc. .... cosa, quando e come... un po' complicato....
Per favore, ditemi perché ci sono dei plus in return(StrToTime(ye+"."+mo+".01").
Funzione ProfitIFStopInCurrency()
L'altro giorno avevo bisogno di una funzione per il mio pannello informativo che restituisse il profitto/perdita stimato nella valuta del deposito quando un gruppo di posizioni ha attivato i loro stop. Beh, non è la prima volta che scrivo una funzione del genere. L'ho testato a lungo e duramente in diverse società di intermediazione e su diversi strumenti con diversi modi di calcolo dei profitti. Se non lo sai, ce ne sono tre: Forex, CFD e Futures. Ma non riesco a trovare la differenza tra Forex e Futures, ma ho comunque incluso la possibilità di un calcolo diverso nel codice. La perdita massima che può essere restituita dalla funzione è limitata artificialmente dal saldo del conto corrente. Tradizionalmente, potete passare dei parametri alla funzione e quindi filtrare le posizioni di cui avete bisogno per l'analisi:
HH. In allegato lo script per testare la funzione ProfitIFStopInCurrency().
Funzione ProfitIFTakeInCurrency()
Questa funzione è simile alla precedente, solo che restituisce il profitto/perdita stimato nella valuta del deposito quando un gruppo di posizioni ha attivato la loro presa. Viene anche preso in considerazione il metodo di calcolo del profitto: Forex, CFD e Futures .Il massimo profitto che la funzione può restituire è limitato artificialmente dal numero 999.999.999. Parametri:
Ho allegato uno script per testare la funzione ProfitIFTakeInCurrency().
Ciao, non avete una sorta di modello (per i principianti) per rendere più facile scrivere un EA per il tester e per il trading reale. Qualcosa non si muove ((((
Template? :)) Quindi prendete uno qualsiasi dei miei EA come punto di partenza...
Grazie.... cose interessanti e utili in generale.... ma per ora ho intenzione di creare un consulente di trading che aprirebbe e chiuderebbe posizioni basate sui segnali più semplici (incrociando le medie per esempio) per cominciare, ma tutti questi controlli, determinando il lotto ecc. .... cosa, quando e come... un po' complicato....
Igor, mi scuso per le mie frequenti domande, e spero davvero che questo non sia troppo difficile per te..... Potreste dirmi cosa si intende per
gbDisablednella funzione OpenPosition() per l'online
ecco una parte del codice:
Quando si compila dà un errore che la variabile non è definita.