//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 02.07.2013 |//| Описание : Выполняет корректирование ценовых уровней под STOPLEVEL. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование торгового инструмента |//| op - торговая операция |//| pp - цена открытия/установки |//| sl - ценовой уровень StopLoss |//| tp - ценовой уровень TakeProfit |//+----------------------------------------------------------------------------+void CorrectingPrice(string sy, int op, double& pp, double& sl, double& tp) {
if (sy=="" || sy=="0") sy=Symbol();
RefreshRates();
int di=MarketInfo(sy, MODE_DIGITS);
int msl=MarketInfo(sy, MODE_STOPLEVEL);
int sp=MarketInfo(sy, MODE_SPREAD);
double mp=MarketInfo(sy, MODE_POINT);
double pa=MarketInfo(sy, MODE_ASK);
double pb=MarketInfo(sy, MODE_BID);
double ds=NormalizeDouble(pp-sl, di);
double dp=NormalizeDouble(pp-tp, di);
if (msl==0) msl=2*sp;
switch (op) {
case OP_BUY:
pp=pa;
sl=pp-ds;
tp=NormalizeDouble(pp-dp, di);
if (sl>pp-msl*mp) sl=pp-msl*mp;
if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
break;
case OP_SELL:
pp=pb;
sl=NormalizeDouble(pp-ds, di);
tp=pp-dp;
if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
if (tp>pp-msl*mp) tp=pp-msl*mp;
break;
case OP_BUYLIMIT:
if (pp>pa-msl*mp) {
pp=pa-msl*mp;
sl=pp-ds;
tp=NormalizeDouble(pp-dp, di);
}
if (sl>pp-msl*mp) sl=pp-msl*mp;
if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
break;
case OP_BUYSTOP:
if (pp<pa+msl*mp) {
pp=pa+msl*mp;
if (sl>0) sl=pp-ds;
if (tp>0) tp=NormalizeDouble(pp-dp, di);
}
if (sl>pp-msl*mp) sl=pp-msl*mp;
if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
break;
case OP_SELLLIMIT:
if (pp<pb+msl*mp) {
pp=pb+msl*mp;
sl=NormalizeDouble(pp-ds, di);
tp=pp-dp;
}
if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
if (tp>pp-msl*mp) tp=pp-msl*mp;
break;
case OP_SELLSTOP:
if (pp>pb-msl*mp) {
pp=pb-msl*mp;
sl=NormalizeDouble(pp-ds, di);
tp=pp-dp;
}
if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
if (tp>pp-msl*mp) tp=pp-msl*mp;
break;
default:
Message("CorrectingPrice(): Неизвестная торговая операция!");
break;
}
}
这个和那个,很多不必要的对其他函数的调用,导致了错误!
嗯,你已经犯了错误...
它简单明了:你可以根据你的需要编辑它。
你能不能画一些类似于这个 的东西...
更新...
附上一个测试ExistOPNearPrice()函数的脚本
做了,不知道是否正确。
嗯,你已经犯了错误...
这很简单明了:根据你的需要进行调整。
做了,我不知道这是否正确。
CorrectingPrice()。
CorrectingPrice()。
伊戈尔,一些经纪公司使用Spread*2代替StopLevel,而StopLevel的值为零。粗略地看了一下代码,我没有看到对这种情况的任何检查。如果能调整代码以检查这种情况就好了,否则就会出现同样的130个错误。
Artem,我没有遇到这样的DC......你能在你的私人信息中给我发几个吗?我将阅读交易条例...
还是有一个更简单的方法?你能告诉我,使用这样的修正是否足够正确?
更新:我已经纠正了CorrectingPrice() 函数。
CorrectTF()函数的一个新版本。
前段时间,有人批评我的CorrectTF() 函数,声称它的功能与它的名字不相符。事实上,它将时间框架调整到最近的最小值,而不是仅仅调整到最近的一个。我计算了标准时间段之间的算术平均值,并根据其描述重写了该函数。
Artem,我没有遇到这样的DC......你能在你的私人信息中给我发几个吗?我将阅读交易条例...
辍学
或者你可以做一些更简单的事情。你能告诉我,使用这样的修正是否足够正确?
当然,一切是正确的。
更新:我纠正了CorrectingPrice() 函数。
Artyom,我还没有遇到过这样的DC...你能在你的私人信息中给我发几个吗?我将阅读交易条例...
或者你可以用更简单的方法来做。你自己告诉我,使用这样的修正案是否足够正确?
更新:我对CorrectingPrice() 函数做了一个修正。
同事们好,我还在研究代码,我不能很好地理解其中的奥妙,有点为难。
按照我的理解,在下订单之前,我们必须调用这个函数来纠正参数。
有这样一条线来打开一个订单。
如果(buy == true && Open[0]>UpTr && Trade) {
buy=OrderSend(Symbol(),OP_BUYSTOP,LOT(),NormalizeDouble(op,Digits),slipage,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits), "T",Magic,0,MediumBlue)。
这是应该解决的地方吗?以及如何正确地做到这一点。或者这个命令不需要CorrectingPrice()?
预先感谢你。