任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 78

 
请按优先顺序答复。我有一个由柱状图显示的指标。当加入或重新连接后,它显示一个op-penny值。我已经在第一次启动时设置了条件,以重置数组的第0个单元。我把它设置为inite - 它没有帮助。我在启动时重置了它 - 好的。(我在开始时设置了条件:如果(GetLastError()==6)zas[0]=0.0; - 没有帮助。
 
dikson1976-1:
请按优先顺序答复。我有一个由柱状图显示的指标。当加入或重新连接后,它显示一个op-penny值。我已经在第一次启动时设置了条件,以重置数组的第0个单元。我把它设置为inite - 它没有帮助。我在启动时重置了它 - 好的。(我在开始时设置了条件:如果(GetLastError()==6)zas[0]=0.0; - 没有帮助。

我不能没有代码。
 

多佐尔



试着以相反的顺序浏览一下这些订单。

 for(i=OrdersTotal()-1;i>=0;i--)
      {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         {
     // и тд
         }
       }
 
自己处理了。别紧张。谢谢大家。
 
Dozol:

朋友们,帮帮我吧。我需要关闭一个选定货币对的所有订单。这是我写的东西(EA代码的一部分)。

int Zakrit_vse() ...

使用SRC在论坛上粘贴代码

我把它粘贴在这里,也许你们会发现一些有趣的东西。

int Zakrit_vse()
{  
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()!=Symbol()) continue;
      
         //--- Close pending orders
         if (OrderType()==OP_BUYLIMIT  ||
             OrderType()==OP_BUYSTOP   ||
             OrderType()==OP_SELLLIMIT ||
             OrderType()==OP_SELLSTOP)         
         {  
            OrderDelete(OrderTicket(),CLR_NONE)
            Prov_oshibok();
            return(0);
         }
         
         //--- Close opened position BUY
         if (OrderType()==OP_BUY)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Bid,100,CLR_NONE);
            Prov_oshibok();
            return(0);
         }
         //--- Close opened position SELL
         if (OrderType()==OP_SELL)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Ask,100,CLR_NONE);
            Prov_oshibok();
            return(0);
         }
}  }  }
}
 
Dozol:

朋友们,帮帮我吧。我需要关闭一个选定货币对的所有订单。以下是我所写的内容(EA代码的一部分)。


当一切都已经在你之前被发明的时候,为什么还要重新发明轮子。比如说。不要忘记这一点
 

帮助!我有一个外部通道指标的代码(当达到通道的上限时,交易打开卖出--当达到下限时关闭,以反向顺序买入)。不知道什么原因,它不能打开交易,我找不到错误。与另一个通道指标完美配合。我想马上指定所有的缓冲区都被设置。

代码见附件。

外置双Lots = 0.1。
外部字符串Comment = "TMA Canal2"。
外置 int TakeProfit = 20;
外来的int StopLoss = 20;
外部int Slippage = 2; // 滑移量
外来的int Magic = 124;

外部字符串Indi = "指标数据"。
外部字符串 TimeFrame = "当前的时间 框架。
外来的int TMAPeriod = 56;
外部int Price = PRICE_CLOSE;
外置双倍ATRMultiplier = 2.0。
外部intTRPeriod = 100。
外来的双倍TrendThreshold = 0.5。
外部 bool ShowCenterLine = false;

双重PriceHigh, PriceLow, SL, TP。
int票。

//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
int init()
{
if (Digits ==3 || Digits ==3) // 用于五位数的经纪人
{
TakeProfit *= 10。
StopLoss *= 10;
滑移*=10。
}
return(0);
}

//+------------------------------------------------------------------+
//|计算未结头寸|
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0。
//----
for(int i=0;i<OrdersTotal();i++)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
如果(OrderSymbol()==Symbol() && OrderMagicNumber()==124)
{
如果(OrderType()==OP_BUY) buys++;
如果(OrderType()==OP_SELL) sells++;
}
}
//---- 退货订单量
if(buys>0) return(buys)。
否则返回(-sells)。
}

//+------------------------------------------------------------------+
//| 检查未结订单的情况 |
//+------------------------------------------------------------------+
空白的CheckForOpen()。
{
双重PriceHigh, PriceLow。
int票。
//----,只为新棒的第一次抽动而去交易。
如果(Volume[0]>1)返回。

PriceHigh = iCustom (Symbol(, 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0);
PriceLow = iCustom (Symbol(, 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0);


如果(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh && Ask<=PriceHigh)

{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "TMA Canal2",124,0,Red)。
返回。
}
//---- 购买条件
如果(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow && Bid>=PriceLow)

{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "TMA Canal2",124,0,Blue);
返回。
}
//----
}
//+------------------------------------------------------------------+
//| 检查平仓的条件|
//+------------------------------------------------------------------+
空白的CheckForClose()
{
双重PriceHigh, PriceLow。
//----,只为新酒吧的第一笔交易而去。
如果(Volume[0]>1)返回。

PriceHigh = iCustom (Symbol(, 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0);
PriceLow = iCustom (Symbol(, 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0);

for(int i=0;i<OrdersTotal();i++)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
如果(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) 继续。
//---- 检查订单类型
如果(OrderType()==OP_BUY)
{
如果(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh) OrderClose(OrderTicket(),OrderLots(), Bid,3,White);
突破。
}
如果(OrderType()==OP_SELL)
{
if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
突破。
}
}
//----
}

//+------------------------------------------------------------------+
//|启动功能|
//+------------------------------------------------------------------+
空白启动()。
{
//---- 检查历史和交易情况
如果(Bars<100 || IsTradeAllowed()==false) 返回。
//---- 按当前符号计算未结订单
如果(CalculateCurrentOrders(Symbol())==0) CheckForOpen()。
否则CheckForClose()。
//----
}
//+------------------------------------------------------------------+

 
ZahvatkiN:

我是mql4的新手,我擅长使用SL和TP,但是当我需要通过一个指标的交叉信号来关闭订单时,我有一个问题。 我不太明白OrderSelect()函数是如何工作的。我知道为了搜索一个订单,我们使用了一个循环,它在代码中,但在交易过程中发现,订单刚刚打开,立即关闭,因为打开买入的条件与关闭卖出的条件重合,如何解释它,这不应该做我不明白,请解释。

SRC 按钮是用来粘贴代码 的!

当你写完后,也要用文档 进行补充!

如有抄袭,请与作者联系,以便进行修改或进行工作!

 


我再补充一次。我告诉过你多少次了,要插入代码,使用最上面一行的按钮。

而坚持代码编写方式 是可取的,....。希望如此,但不是必须的。但大多数人更倾向于用易于理解的代码来回答。

 

我是mql4的新手,我知道如何使用SL和TP,但是当我需要通过反向指标信号关闭订单时,我遇到了一个问题。我不知道OrderSelect()函数是如何工作的。我知道循环是用来搜索订单的,这在代码中是有的,但在交易过程中发现,订单刚开盘就马上平仓,因为开盘买入的条件与平仓卖出的条件重合,如何解释不应该这样做我不明白,请解释。

borilunad 谢谢你的提示,重新做了,那么你也可以把那个带引号的信息删掉,以免杂乱。

if(buy1sOpen())
         {
         OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "", magic, 0, Blue);
         }
      if(sell1sOpen()) 
         {
         OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0, "", magic, 0, Red);
         }
         
      for(int i=0; i<OrdersTotal(); i++)
         {
         OrderSelect(i,SELECT_BY_POS);
         if(buy1sClose()) 
           {
           OrderClose(i, lots, Ask, Slippage, Blue);
           }
         if(sell1sClose()) 
           {
           OrderClose(i, lots, Bid, Slippage, Red);
           }
         }
         
      }
   }
bool buy1sOpen()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1>Ss1 && Sm2<Ss2 && Sm1<30)
      return(true);
      return(false);
   }
bool sell1sOpen()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1<Ss1 && Sm2>Ss2 && Sm1>70)
      return(true);
      return(false);
   }
bool buy1sClose()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1<Ss1 && Sm2>Ss2 && Sm1>70)
      return(true);
      return(false);
   }
bool sell1sClose()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1>Ss1 && Sm2<Ss2 && Sm1<30)
      return(true);
      return(false);
   }