if(isCloseLastPosByStop ()== lot ) //если последний ордер закрылся по стопу
{
P=lot*2; //открыть ордер объемом = объему закрытому по стопу ордеру умноженному на 2
OrderSend(Symbol(),OP_SELL,P,Bid,1,Ask+1500*Point,Ask-300*Point,"jfh",123 );
}
else //если последний ордер закрылся не по стопу
{
P=0.1;
OrderSend(Symbol(),OP_SELL,1,Bid,P,Ask+1500*Point,Ask-300*Point,"jfh",123 ); //открыть ордер обычным объемом 0.1
}
return(0);
}
//============================================================ bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp,lot, osl; // добавил переменную - количество лотов в оредереint dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
osl=NormalizeDouble(OrderStopLoss(), dg);
if (ocp==osl)
lot=OrderLots( ) ; //добавил вычисление количества лотов в ордере который закрылся по стопу.return(lot); // вместо возвращаемого функцией значения True вставил переменную lot со значением количества лотов
}
return(False);
}
//+----------------------------------------------------------------------------+bool isCloseLastPosByStop(string sy, int op, int mn, double &ll) {
double pt;
int t, dg, i, j=-1, k=OrdersHistoryTotal()-1;
for (i=k; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderMagicNumber()!=mn) continue; // если магик не тот, переходим к следующемуif (OrderSymbol()!=sy) continue; // если символ не тот, переходим к следующемуif (OrderType()!=op continue; // если тип не тот, переходим к следующемуif (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(OrderSymbol(), MODE_DIGITS); // количество знаков в цене символа ордера
pt=MarketInfo(OrderSymbol(), MODE_POINT); // размер пункта инструмента в валюте котировки ордераif (MathAbs(OrderClosePrice()-OrderStopLoss()<0.5*pt)) { // Если закрыт по стопу
ll=OrderLots(); // записываем количество лотов в ордере, закрытом по стопуreturn(true); // возвращаем истину
}
}
return(False); // возвращаем ложь (позиции нету, либо не по стопу)
}
//+----------------------------------------------------------------------------+
现在检查一下最后一个Buy,比如说。
//+----------------------------------------------------------------------------+double Lot=MarketInfo(Symbol(), MODE_MINLOT); // задаём минимальное значение переменнойif (isCloseLastPosByStop(Symbol(), OP_BUY, Magic, Lot)) {// в переменную Lot будет записано значение лота закрытой позиции// Если последний закрытый Buy закрыт по стопу
Lot= //... эта переменная содержит размер лота закрытой позиции, выполняете нужные вычисления с этой переменной
}
//+----------------------------------------------------------------------------+
下午好。
请告知如何实施以下措施。
价格在1.9047和1.9080之间移动(数字是任意的)。如果下一根蜡烛的开盘价超出了这个范围--发出警报。如果没有--等待下一根蜡烛。就这样,直到价格离开这个范围。
预先感谢你。
这里有一段代码,其中的数据随后被用于分析。
也就是说,进一步的代码将看起来像这样。
而这里的问题是:我们应该如何放置,放在哪里?如果在条件内,将不打印警报,如果在条件外,警报将在每个刻度 上打印。
我为我的问题措辞不正确而道歉。
这里有一段代码,其中的数据随后被用于分析。
也就是说,进一步的代码将看起来像这样。
而这里的问题是:我们应该如何放,放在哪里?如果在条件内,将不打印警报,如果在条件外,警报将在每个刻度上打印。
我为我的问题措辞不正确而道歉。
谢谢你,我已经把它整理出来了。这里还有一个问题:现在的警报是从指定的时间间隔开始,当超过这个范围,直到 "停止 "时才产生警报。当第一个值满足条件时,我能否以某种方式停止这种 "搜索"?
那么,你需要了解在一段时期内一直真实存在的主要条件。例如--比较时间。在发出所有警报后,你需要给你与之比较的变量分配一个新的值,即当前时间。寻找一个定义新栏的函数。它的构造概念应该对你有帮助。
你在这里 读过吗?
我如何知道下挂单 时与市场的最小距离?
我如何知道下挂单时与市场的最小距离?
int level=MarketInfo(Symbol(), MODE_STOPLEVEL)。
如果StopLevel为零,那么很可能level=MarketInfo(Symbol(), MODE_SPREAD)*2。
阿尔帕里肯定是用双倍差价作为StopLevel。
要确定距离,请阅读这里。
谢谢artmedia70。
好了,很久没有答案了,我给你一个提示:当从isCloseLastPosByStop()函数返回真值时,再返回一个值,即找到的最后位置的手数。
如何做?通过引用向函数传递一个变量,在这个变量中,你将在函数本身中写入手数大小。要做到这一点,你需要稍微修改函数isCloseLastPosByStop()
如果你什么都不懂,那就找一个能返回最后一次平仓的手数的函数。或者你可以自己做一个。并使用它,但这比将批号值与真值一起传递更费事。
我已经改变了这个函数,使其不再是True函数,而是返回一个变量lot,在这个函数中我写了lot的大小。
一切都在编译,但订单却没有打开。
2013.10.23 20:57:46 2011.02.24 16:25 GMT EURUSD,M5:OrderSend error 4051
2013.10.23 20:57:46 2011.09.22 22:20 WEDNING EURUSD,M5: OrderSend函数 的无效手数
请告诉我我的错误是什么。
谢谢你。
我改变了这个函数,使其返回的不是True,而是一个变量lot,其中我把lot大小写在了函数本身。
所有编译,但订单没有在日记中打开说。
2013.10.23 20:57:46 2011.02.24 16:25 PM EURUSD,M5:OrderSend error 4051
2013.10.23 20:57:46 2011.09.22 22:20 WEDNING EURUSD,M5:OrderSend函数的无效手数
请告知我的错误是什么。
谢谢你。
通过stop确定最后关闭位置 的函数有一个bool类型,而你试图返回的是double类型。相应地,它返回0或1。
我写道,我们应该在其中增加一个变量的引用传递。
现在检查一下最后一个Buy,比如说。
像这样...