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

 
mmmmm....我个人认为它写得很好--唯一的问题是代码片段的位置....。你能正确地放置它吗? 我不清楚如何做到这一点。
 
splxgf:
说实话,我不知道你是否可以在另一个功能中描述一个功能,我从来没有遇到过。
不要迷惑我们这些黑衣人。在这个分支的层面上,只需说明所有的用户函数必须位于启动函数之外。
 
CLAIN:
mmmmm....就我个人而言,我认为它写得很正确--唯一的问题是代码片断的位置....。我不知道该怎么做。

好吧,我不会准确地发布它,但正如已经写过的那样,所有的自定义功能都无法启动。

在概念层面

开始(){}。

MACD{}

AnalyzeSignal(){}。

将自定义函数的描述删除到一个单独的文件中,确保程序的其余部分在编译时没有错误括号信息,并将每个函数停靠在结果代码的最末端。

 

谢谢你,它起作用了=)只是交易没有打开,但这是件小事=)没有你就做不到了 )

//+------------------------------------------------------------------+
//|                                                     MACD ^^^.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern int TP = 100; 
extern int TS = 100;
extern double lots = 0.1;
int slip = 3;
int Magic = 1;

int total;
int ticket = 0; //объявил тотал и тикет



//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----


int signal = signal_MACD(); 
AnalyzeSignal(signal);




//----
   return(0);
  }
//+------------------------------------------------------------------+






int signal_MACD()
{
   int MACD[8] = {0,1,2,3,4,5,6,7};
MACD[0] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,7);
MACD[1] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,6);
MACD[2] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,5);
MACD[3] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,4);
MACD[4] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,3);
MACD[5] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,2);
MACD[6] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,1);
MACD[7] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,0);
   total = OrdersTotal();
   if(total<1)
   {
      if(MACD[0]<0)
      {
         if(MACD[1]>0)
         {
            if(MACD[2]>0)
            {
               if(MACD[3]>0)
               {
                  if(MACD[4]>0)
                  {
                     if(MACD[5]>0)
                     {
                        if(MACD[6]>0)
                        {
                           if(MACD[7]<0)
                           {
                              return(-100);
                           }
                        }
                     }
                  }
               }
            }
         }
      }
      if(MACD[0]>0)
      {
         if(MACD[1]<0)
         {
            if(MACD[2]<0)
            {
               if(MACD[3]<0)
               {
                  if(MACD[4]<0)
                  {
                     if(MACD[5]<0)
                     {
                        if(MACD[6]<0)
                        {
                           if(MACD[7]>0)
                           {
                              return(100);
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
}

void AnalyzeSignal(int signal)
{
   if(signal == 100)
   {
      ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"покупаем",Magic,0,Green);
      if(ticket>0)
      {
         OrderSelect(ticket,SELECT_BY_TICKET);
         Print("открылись на покупку по цене:", OrderOpenPrice());
      }
      else
      {
         Print("открыться не удалось по причине:", GetLastError());
         return(0);
      }
   }
   if(signal == -100)
   {
      ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Green);
      if(ticket>0)
      {
         OrderSelect(ticket,SELECT_BY_TICKET);
         Print("открылись на продажу по цене:", OrderOpenPrice());
      }
      else
      {
         Print("открыться не удалось по причине:", GetLastError());
         return(0);
      }
   }
}

 

向程序员请教


阿凡达
1
Metamql 20.09.2011 14:31
亲爱的专业人士,请给予一些建议。有两条移动平均线,周期为5和60。当快速MA从底部向上越过慢速MA+过滤器时,就会开启一个买入交易。问题是,如何使一笔交易只开一次,当它关闭时,不开新的交易,即使有合适的条件可以开,直到有一个反向交叉点?
 

你好。

请帮助--请回复我在第196页的帖子。(关于int MAGIC的问题;)

预先感谢你。

 
nemo811:

你好。

请帮助--请回复我在第196页的帖子。(关于int MAGIC的问题;)

预先感谢你。


你是否尝试过制作带参数的函数?因此,为了不使用外部全局变量(每个人都可以用自己的名字来称呼它们)。
 
sergeev:

向程序员请教


1
Metamql 20.09.2011 14:31
亲爱的专业人士,请给予一些建议。有两条移动平均线,周期为5和60。当快速MA从下往上越过慢速MA+过滤器时,交易在买入时开启。问题是,如何使一笔交易只开一次,当它关闭时,不开新的交易,即使有合适的条件可以开,直到出现反向交叉?

设置一个标志,禁止进一步打开,并在穿越回来时移除标志,可以延迟几个小节以避免反弹。
 
Vinin:

你有没有试过制作带参数的函数?因此,为了不使用外部全局变量(每个人都可以用自己的方式称呼它们)

我的意思是,像。

int OrdTicket_b(int MAGIC)
 {
  string SMB=Symbol();
  int OrdTicket;
  int i;
  for(i=0;i<OrdersTotal();i++)
   {
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
     {
      if(OrderSymbol()==SMB)
       {
        if(OrderMagicNumber()==MAGIC || OrderMagicNumber()==777)
         {
          if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            OrdTicket=OrderTicket();
           }  
         }  
       }          
     }
   }
  return(OrdTicket);
 }

???

...和条件

    if(OrderMagicNumber()==MAGIC || OrderMagicNumber()==777)

将被正确地跟踪?

 
nemo811:

我的意思是,像。

???

...和条件

将被正确地跟踪?


int OrdTicket_b(int lMAGIC)
 {
  string SMB=Symbol();
  int OrdTicket=0;
  int i;
  for(i=0;i<OrdersTotal();i++)
   {
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
     {
      if(OrderSymbol()==SMB)
       {
        if(OrderMagicNumber()==lMAGIC)
         {
          if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            OrdTicket=OrderTicket();
           }  
         }  
       }          
     }
   }
  return(OrdTicket);
 }
像这样,变量OrdTicket应该被赋予一些默认值否则就没有空缺职位,函数将返回一些东西