//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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()函数
有一天,我的信息面板 需要一个函数,当一组头寸触发止损时,以存款的货币返回估计的利润/损失。嗯,这不是我第一次写这样的函数。我在不同的经纪公司和不同的工具上用不同的利润计算方式对它进行了长时间的测试。如果你不知道,有三种:外汇、差价合约和期货。但我找不到外汇 和期货之间的区别,但我还是把不同的计算方式纳入了代码。职能部门可以返还的最大损失被当前账户余额人为限制。传统上,你可以向函数传递参数,从而过滤出分析所需的位置。
这里是测试ProfitIFStopInCurrency()函数的脚本。
ProfitIFTakeInCurrency()函数
这个函数与上一个函数类似,只是它在一组头寸触发取款 时,以存款的货币返回估计的利润/损失。 利润计算方法也被考虑在内: 外汇、差价合约和期货。该函数所能返回的最大利润被人为地限制在999,999,999这个数字上。参数。
我附上了一个脚本来测试ProfitIFTakeInCurrency()函数。
嗨!你们难道没有某种模板(为初学者准备的),以方便为测试者和实际交易编写EA。 有些东西没有移动((((
模板?:))所以把我的任何一个EA 作为一个起点...
谢谢....有趣和有用的东西在一般....但现在我打算创建一个交易顾问,根据最简单的信号(例如穿越平均线)开始开仓和平仓,但所有这些检查、确定手数等....,什么、何时和如何...有点复杂....
伊戈尔,我为我经常提出的问题道歉,我真的希望这对你来说不是太困难.....。请你告诉我什么是
gbDisabled在OpenPosition()函数中用于在线的
这里是代码的一部分。
在编译时,它给出了一个错误,即该变量未被定义。