[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 282

 
你能告诉我是哪一个吗?我只有两个。MACD和移动平均线
 

请帮助一个初学者。如何写这个代码部分。

检查市场订单,如果我们的金融工具没有市场订单,我们就买下它?

我们还需要一个代码行来重新安排移动止损,使其与真实价格相差500点

帮助!!!。

还有,距离是多少(从哪里,具体到哪里)?

//+------------------------------------------------------------------+
//|                                                  MACD Sample.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+

extern double TakeProfit = 50;
extern double Lots = 0.1;
extern double TrailingStop = 30;
extern double MACDOpenLevel=3;
extern double MACDCloseLevel=2;
extern double MATrendPeriod=26;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double MacdCurrent, MacdPrevious, SignalCurrent;
   double SignalPrevious, MaCurrent, MaPrevious;
   int cnt, ticket, total;
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external 
// variables (Lots, StopLoss, TakeProfit, 
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
   if(TakeProfit<10)
     {
      Print("TakeProfit less than 10");
      return(0);  // check TakeProfit
     }
// to simplify the coding and speed up access
// data are put into internal variables
   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
   MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
   MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);

   total=OrdersTotal();
   if(total<1) 
     {
      // no opened orders identified
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
      // check for long position (BUY) possibility
      if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
         MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
      // check for short position (SELL) possibility
      if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && 
         MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
      return(0);
     }
   // it is important to enter the market correctly, 
   // but it is more important to exit it correctly...   
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
            // should it be closed?
            if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
               MacdCurrent>(MACDCloseLevel*Point))
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                 return(0); // exit
                }
            // check for trailing stop
            if(TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else // go to short position
           {
            // should it be closed?
            if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
               MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
               return(0); // exit
              }
            // check for trailing stop
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
  }
// the end.

好吧,这简直是无稽之谈!如果有任何订单:无论是挂单还是市价,而且是任何金融工具的订单,都不会在这个代码中打开。

   total=OrdersTotal();
   if(total<1)

我们可以看到,如果有少于一个订单,它将被执行。还是我错了?

 

移动平均线,采取CalculateCurrentOrders(Symbol()),它返回的值=未结订单的数量,按符号和魔法过滤,符号=交易方向:例如-1意味着1个订单在出售。如果需要,可以使用MathAbs()来忽略符号。

从上面的代码来看,采取追踪止损。

//检查跟踪止损--在这里,甚至还有评论。

如果(TrailingStop>0) { ...},它是在2个地方--用于购买和销售。一切都很简单。或者,你可以使用Igor Kim的现成函数,这里有一种特殊的颜色。它们对于真实的交易来说更加普遍和正确,但对于初学者来说也更难理解。如果你对新版本有信心,你会得到一个更好的交易机器人。

p.s. 对于调试,使用Print(),它有很大的帮助。

 
rusa: 我想请你自己在专家顾问中插入这个功能。在图片上,你可以看到在一个柱子上有3个订单被打开。我不知道如何订购我的外汇机器人,我不想重写它们。

开始了解你的代码。我很惊讶。你所附的东西不能工作。我可以看到,它是由碎片组装而成的,但至少应该正确放置括号,应该定义变量。而信号--不清楚,是什么意思,例如,"rsi>30"--指标RSI值,还是其他什么?Trade_BUY()函数被附在函数start...等。

要么给我完整的工作代码(开单),要么填写信号、跟踪等的TOR,这样我从头开始写会更容易。

 
nuan:

您是否有详细说明,如何下载MICEX两年的报价,例如卢克石油公司的报价。

如何进一步正确地转换它们并在MT4中打开它们,如果有链接,请给出链接,如何做到这一点。

P.S. 预先感谢。


这里是几年来的曼巴
http://zalil.ru/31909547
 
kolyango:

请帮助一个初学者。如何写这个代码部分。

检查市场订单,如果我们的金融工具没有市场订单,我们就买下它?

我们还需要一个代码行来重新安排移动止损,使其与真实价格相差500点

帮助!!!。

还有,距离是多少(从哪里,具体到哪里)?

好吧,这简直是无稽之谈!如果有任何订单:挂单或市价,而且是任何金融工具的订单,都不会在这个代码中打开。

我们可以看到,如果有少于一个订单,它将被执行。还是我错了?


或者是你错了?

for (int i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == .pair)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
OrderSend(Symbol(), OP_BUY, .......

}
}
}

 

我需要一些帮助。

一个普通的移动平均线 指标,当该线向下突破时,就会出现买入(上升)或卖出(下降)信号。

有没有人有图形对象的完成代码,能不能贴出来!?

谢谢。

 
这些都在数据库中
 
ZZZEROXXX:
这些都在数据库中。
如果能提供一个链接就更好了。
 

你好!你能告诉我如何 "循环 "检查上/下栏吗? 也就是说,我怎样才能把这种情况描述得 "更短"?

Close[0]>Open[0]&& Close[1]>Open[1]&& Close[2]>Open[2]&& Close[3]>Open[3] &&& Close[4]>Open[4]&& Close[5]>Open[5]&& Close[6]>Open[6]&& Close[7]>Open[7]

提前感谢。