//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
なぜreturn(StrToTime(ye+"."+mo+".01") にプラスがあるのか教えてください。
。
ProfitIFStopInCurrency()関数
先日、インフォメーションパネルで、ポジションのグループがストップを発動したときに、入金通貨で推定損益を返す関数が必要でした。まあ、このような関数を書くのは初めてではないのですが。私は、さまざまな証券会社、さまざまな商品、さまざまな利益計算方法で、長い間テストしてきました。ご存じない方もいらっしゃると思いますが、FX、CFD、先物の3つがあります。しかし、FX と先物の 違いが分かりません。それでも、異なる計算の可能性をコードに盛り 込みました。この機能によって返される最大損失は、現在の口座残高によって人為的に制限されています。従来は、関数にパラメータを渡すことで、分析に必要なポジションをフィルタリングすることができました。
HH. ProfitIFStopInCurrency()関数をテストするためのスクリプトを添付します。
ProfitIFTakeInCurrency()関数
この関数は、前の関数と似ていますが、ただ、ポジションのグループがその取得を トリガーしたときの推定利益/損失を、預金の通貨で返します。 利益計算方法も考慮されています。 FX、CFD、先物。この関数が返す利益の最大値は、999,999,999という数字によって人為的に制限されています。パラメータ
HH. ProfitIFTakeInCurrency()関数をテストするスクリプトを添付します。
こんにちは!テスター用と実際の取引用のEAを簡単に書くためのテンプレート(初心者用)みたいなものはないのでしょうか? 何かが動いていない(((
テンプレート?:))だから、私のEAの どれかを出発点として...。
ありがとうございます...。面白いもの、役に立つもの全般...。しかし、今のところ、手始めに最も簡単なシグナル(例えばクロス平均)を基にポジションをオープン、クローズするトレーディングアドバイザーを作ろうと思っていますが、これらのチェック、ロットの決定など・・・何を、いつ、どのように・・・・・。ちょっと複雑ですが...。
イゴール、度々の質問で申し訳ないのですが、本当にご無理をなさらないでください......。というのはどういう意味か教えてください。
gbDisabled
オンライン用のOpenPosition()関数の中で
以下は、そのコードの一部です。
コンパイルすると、変数が定義されていないというエラーが出ます。