[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 291

 
谢谢大家!我想明白了......我先是在没有IndicatorBuffers(2)的情况下做了一下;结果没有成功......
 

帮助请有一个顾问,以突破分形。 我拿起好的参数,只需要添加,它设置了很多的马丁格尔(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);

}

我不善于写俄语,抱歉!"。

 
AppaRat:

我不擅长写俄文,抱歉!"。

你甚至不知道如何粘贴代码。 我不想读这个。
 

告诉我谁能帮助解决克里莫夫区块的问题,问题是它没有返回最后一次关闭的值,而是返回条件的最后一次关闭的值

所以在2个条件下

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);
}
 
FoxUA:

告诉我谁能帮助解决克里莫夫区块的问题,问题是它没有返回最后一次关闭的值,而是返回条件的最后一次关闭的值

所以在2个条件下

它返回两个值 "真"。

如何使它 返回最后关闭的订单,而不是最后一个条件的订单。

为了方便起见,我在代码中加入了很多检查项


你是否在这个函数中加入了对地段的检查?现在他们用传递的手数检查最后的平仓,手数可能总是等于零,或者是一个整数。变量ll必须是双倍的类型。我们为什么要在这里检查地段呢?

你写下你想实现的目标,他们就会告诉你 :)

 

是的,为什么该地段是一个int?该地段一直是双倍的。

你可以这样做,当你剩下一个订单时,确定哪一个订单是剩下的,然后搜索相反的订单。

 
FoxUA:

告诉我谁可以帮助克里莫夫区块...

不要在不同的主题中重复发帖,这是不好的形式。
 
artmedia70:

在自己添加的功能中检查很多?现在他们用传递的手数检查最后的平仓,手数可能总是等于零,或者是一个整数。变量ll必须是双倍的类型。我们为什么要在这里检查地段呢?

你写下你想实现的目标,他们就会告诉你 :)

我已经实现了一切,但有一个错误,就是在某一时刻,我不需要的订单突然出现了。

我试着把它改成int,原来是double,但我忘了返回,如果我用一个单独的函数,不进行批量检查,结果不会改变,所以也许我没有正确检查,请帮助我了解这个bug的问题所在。

这就是请求的模样

вот так работает без проблем 
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



 
Roger:

是的,为什么该地段是一个int?该地段一直是双倍的。

你可以这样做,当你剩下一个订单时,确定哪一个订单是剩下的,然后搜索相反的订单。


这不是那么简单,因为打开的条件可能是2个卖家,然后这个搜索将不会找到任何东西。
 
granit77:
不要在不同的主题中重复发帖,这是不好的形式。

对不起,我会更加努力记住删除不同主题中的相同帖子。