bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
и
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);
它返回两个值 "真"。
如何使它只 返回最后关闭的订单,而不是最后一个条件的订单。
为方便起见,我在代码中添加了一个批量检查。
//+----------------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по стопу. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1, int ll=-1) {
datetime t;
double ocp, 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 (ll<0 || OrderLots()==ll) {
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) return(True);
}
return(False);
}
//+----------------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по тейку. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1, int ll=-1) {
datetime t;
double ocp, otp;
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 (ll<0 || OrderLots()==ll) {
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);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
вот так работает без проблем
bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
bool BuyTakeLotA=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotA);
bool SellstopLotC=isCloseLastPosByStop(NULL,OP_SELL,MagBuy,LotC);
bool SellTakeLotC=isCloseLastPosByTake(NULL,OP_SELL,MagBuy,LotC);
при добовлении вот этих запросов
bool BuystopLotB=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotB);
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);
начинает возвращять True не по одному а по двум запросам
BuyTakeLotB и BuystopLotA
帮助请有一个顾问,以突破分形。 我拿起好的参数,只需要添加,它设置了很多的马丁格尔(2更当你失去).或给权力的顾问将只有一倍的手,没有等待2运行(如果有的话).这里是一个顾问。
//+------------------------------------------------------------------+
||分形.mq4 ||
//| TO |
//| http://www.forex-tradexperts-to.narod.ru |
//+------------------------------------------------------------------+
#财产版权"TO"
#属性链接 "http://www.forex-tradexperts-to.narod.ru"
#include <WinUser32.mqh>.
外部int TP_Fract_3=300。
外部int SL_Fract_3=200。
外部int TP_Fract_11=500。
外部int SL_Fract_11=300。
外部 bool buy_Fract_3=true;
外部 bool sell_Fract_3=true。
外部bool buy_Fract_11=true。
外部 bool sell_Fract_11=true。
外部bool podtvergdenie=false。
外部int tofract=10。
外来的double lots=0.1。
外部int ID = 5452。
string com;
双层传播。
int init()
{
com=DoubleToStr(ID,0)。
点差=MarketInfo(Symbol(),MODE_SPREAD)*Point。
return(0);
}
int deinit()
{
return(0);
}
数据时间t1,t2=0。
bool order(double price,int type,string c,int m)
{
int i;
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES)。
如果(OrderComment()==c && OrderMagicNumber()==m && OrderOpenPrice()==price && OrderType()==type)返回(false)。
如果(i==0)返回(true)。
}
如果(OrdersTotal()==0)返回(true)。
}
int start()
{
int i,ret;
t1=时间[0]。
如果(t1!=t2)
{
int fract_buy_3=iHighest(Symbol(),Period(),MODE_HIGH,5,1);
int fract_sell_3=iLowest(Symbol(),Period(),MODE_LOW,5,1)。
int fract_buy_11=iHighest(Symbol(),Period(),MODE_HIGH,21,1);
int fract_sell_11=iLowest(Symbol(),Period(),MODE_LOW,21,1)。
如果( fract_buy_3==3 && buy_Fract_3==true)
{
如果(OrdersTotal()==0)如果(order(High[fract_buy_3]+tofract*Point+spread,4,com,5))OrderSend(Symbol(),OP_BUYSTOP,lot,High[fract_buy_3]+tofract*Point+spread。10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,5)。
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES)。
如果(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==4)
{
OrderModify(OrderTicket(),High[fract_buy_3]+tofract*Point+spread, High[fract_buy_3]+tofract*Point-SL_Fract_3*Point, High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,0,Blue) 。
突破。
}
if(i==0)if(order(High[fract_buy_3]+tofract*Point+spread,4,com,5))
{
如果(podtvergdenie)
{
ret=MessageBox("信号在 "+符号()+" H1 BUYSTOP "+"{设置订单?", "信号", MB_YESNO|MB_ICONQUESTION)。
如果(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,lot,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,5) 。
}
if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lot,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,com,5) 。
}
}
}
如果( fract_sell_3==3 && sell_Fract_3==true)
{
如果(OrdersTotal()==0)如果(order(Low[fract_sell_3]-tofract*Point,5,com,5))OrderSend(Symbol(),OP_SELLSTOP,lot,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,com,5)。
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES)。
如果(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==5)
{
OrderModify(OrderTicket(),Low[fract_sell_3]-tofract*Point,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,0,Red) 。
突破。
}
if(i==0)if(order(Low[fract_sell_3]-tofract*Point,5,com,5))
{
如果(podtvergdenie)
{
ret=MessageBox("Signal on "+Symbol()+"H1 SELLSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);
如果(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lot,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,5);
}
if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lot,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point*Point,com,5) 。
}
}
}
如果( fract_buy_11==11 && buy_Fract_11==true)
{
如果(OrdersTotal()==0)如果(order(High[fract_buy_11]+tofract*Point+spread,4,com,21))orderSend(Symbol(),OP_BUYSTOP,lot,High[fract_buy_11]+tofract*Point+spread。10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,21)。
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES)。
如果(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==4)
{
OrderModify(OrderTicket(),High[fract_buy_11]+tofract*Point+spread, High[fract_buy_11]+tofract*Point-SL_Fract_11*Point, High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,0,Blue) 。
突破。
}
if(i==0)if(order(High[fract_buy_11]+tofract*Point+spread,4,com,21))
{
如果(podtvergdenie)
{
ret=MessageBox("Signal on "+Symbol()+"H4 BUYSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);
如果(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,21) 。
}
if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lot,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,com,21) 。
}
}
}
如果( fract_sell_11==11 && sell_Fract_11==true)
{
如果(OrdersTotal()==0)如果(order(Low[fract_sell_11]-tofract*Point,5,com,21))orderSend(Symbol(),OP_SELLSTOP,lot,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,com,21)。
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES)。
如果(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==5)
{
OrderModify(OrderTicket(),Low[fract_sell_11]-tofract*Point,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,0,Red) 。
突破。
}
if(i==0)if(order(Low[fract_sell_11]-tofract*Point,5,com,21))
{
如果(podtvergdenie)
{
ret=MessageBox("Signal on "+Symbol()+"H4 BUYSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);
如果(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lot,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,21)
}
if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lot,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point*Point,com,21) 。
}
}
}
t2=时间[0]。
}
return(0);
}
我不善于写俄语,抱歉!"。
我不擅长写俄文,抱歉!"。
告诉我谁能帮助解决克里莫夫区块的问题,问题是它没有返回最后一次关闭的值,而是返回条件的最后一次关闭的值
所以在2个条件下
它返回两个值 "真"。
如何使它只 返回最后关闭的订单,而不是最后一个条件的订单。
为方便起见,我在代码中添加了一个批量检查。
告诉我谁能帮助解决克里莫夫区块的问题,问题是它没有返回最后一次关闭的值,而是返回条件的最后一次关闭的值
所以在2个条件下
它返回两个值 "真"。
如何使它只 返回最后关闭的订单,而不是最后一个条件的订单。
为了方便起见,我在代码中加入了很多检查项
你是否在这个函数中加入了对地段的检查?现在他们用传递的手数检查最后的平仓,手数可能总是等于零,或者是一个整数。变量ll必须是双倍的类型。我们为什么要在这里检查地段呢?
你写下你想实现的目标,他们就会告诉你 :)
是的,为什么该地段是一个int?该地段一直是双倍的。
你可以这样做,当你剩下一个订单时,确定哪一个订单是剩下的,然后搜索相反的订单。
告诉我谁可以帮助克里莫夫区块...
在自己添加的功能中检查很多?现在他们用传递的手数检查最后的平仓,手数可能总是等于零,或者是一个整数。变量ll必须是双倍的类型。我们为什么要在这里检查地段呢?
你写下你想实现的目标,他们就会告诉你 :)
我已经实现了一切,但有一个错误,就是在某一时刻,我不需要的订单突然出现了。
我试着把它改成int,原来是double,但我忘了返回,如果我用一个单独的函数,不进行批量检查,结果不会改变,所以也许我没有正确检查,请帮助我了解这个bug的问题所在。
这就是请求的模样
是的,为什么该地段是一个int?该地段一直是双倍的。
你可以这样做,当你剩下一个订单时,确定哪一个订单是剩下的,然后搜索相反的订单。
这不是那么简单,因为打开的条件可能是2个卖家,然后这个搜索将不会找到任何东西。
不要在不同的主题中重复发帖,这是不好的形式。
对不起,我会更加努力记住删除不同主题中的相同帖子。