[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 47

 

亲爱的论坛专家,以前也几乎什么都不懂。

我正试图编写一个简单的专家顾问,使用抛物线Sar 指标作为训练工具。它的行动应该是基本的:如果价格低于Sar值,然后走高,那么我们应该在价格越过指标的那一刻准确地买入,并准确地设置止损和10点获利。而如果是反过来,那就卖掉。

问题是,它总是买进和卖出,但它是在存款有闲钱的情况下进行的,而不是一次。换句话说,只要价格上升到Sar的水平之上,他就不断地买进,直到价格更高,而一旦价格低于Sar,他就一直卖出,直到价格低于Sar。

事实上,问题是:如何使我们的EA在这些条件出现时只做一笔交易,而不是无休止地做一套交易?

以下是我的专家顾问的代码。

//+------------------------------------------------------------------+
//|                                    Current_sar_value_summary.mq4 |
//|                                         Орлов Денис Владимирович |
//|                                                 orlovkem@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Орлов Денис Владимирович"
#property link      "orlovkem@mail.ru"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
                     //объявляем переменные
   double _sar_value; //текущий уровень Сар
   double _price;       //текущий уровень цены
   int _ticket;      //возвращает количество открытых позиций
   
   _sar_value=iSAR(0,0,0.02,0.2,0);//приравнял переменную _sar_value к текущему значению индикатора Сар
   _price=Bid;                      //приравнял переменную _price к текущему уровню цены Бид
   
   //описываем условие покупки: если уровень цены был ниже значения сар
   if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем
                {
                   Alert("Надо покупать");
                   _ticket=OrderSend(Symbol(),OP_BUY,1,Ask,1,Bid-10*Point,Ask+10*Point,NULL,0,0,Red);
                     
                          Print("OrderSend failed with error #",GetLastError());
                           return(0);
                 
                }
                 return(0);
           }
 
         
   if(_price>_sar_value)//описываем условие покупки: если уровень цены был выше значения сар
         {
           if(_price<=_sar_value)// а потом стал ниже, то продаем
            {
                   Alert("Надо продавать");
                   _ticket=OrderSend(Symbol(),OP_SELL,1,Bid,1,Ask+10*Point,Bid-10*Point,NULL,0,0,Red);
                     
                          Print("OrderSend failed with error #",GetLastError());
                           return(0);
                   
            }
            return(0);
            
         }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

我想请你帮忙想办法,我保证当我成为大师的时候,我不会忽视像我这样的人的请求。

问候,丹尼斯-奥尔洛夫。

 
orlovkem >> :

亲爱的论坛专家,以前也几乎什么都不懂。

我正试图编写一个简单的专家顾问,使用抛物线Sar指标作为训练工具。它的行动应该是基本的:如果价格低于Sar值,然后走高,那么我们应该在价格越过指标的那一刻准确地买入,并准确地设置止损和10点获利。而如果是反过来,那就卖掉。

问题是,它总是买进和卖出,但它是在存款有闲钱的情况下进行的,而不是一次。换句话说,只要价格上升到Sar的水平之上,他就会不断地买进,直到价格更高,而只要价格低于Sar,他就会一直卖出,直到价格低于Sar。

事实上,问题是:如何使我们的EA在这些条件出现时只做一笔交易,而不是无休止地做一套交易?

以下是我的专家顾问的代码。

我想请你帮忙。 我保证,当我成为大师时,我不会忽视其他像我一样的傻瓜的请求。

真诚的,丹尼斯-奥尔洛夫。

你把指标的预测值放在哪里?(在什么变量中......?)与价格值相同

double _sar_value; //текущий уровень Сар
   double _price;       //текущий уровень цены

 
lascu.roman >> :

以及你在哪里有指标的前值?(在哪个变量中......?),与价格值相同

重点是,前一个指标值在前一根蜡烛上,而价格在当前蜡烛上与指标值交叉。

价格也是一样的,"以前的价格值 "是什么意思,是以前的刻度线的价格吗,还是以前蜡烛的收盘价,但不是这样的。

我明白,我必须添加一些东西,但具体是什么我不明白。请帮助,这是我的第一次经验。

>> 尊敬的奥尔洛夫-丹尼斯。

 
orlovkem >> :

重点是,前一个指标值在前一根蜡烛上,而价格在当前蜡烛上与指标值交叉。

价格也是如此,"前一个价格值 "是什么意思,是前一个刻度的价格吗,还是前一个蜡烛的收盘价,但事实并非如此。

我明白,我必须添加一些东西,但具体是什么我不明白。请帮助,这是我的第一次经历。

真诚的,奥尔洛夫-丹尼斯。

那你明白你说的话吗?你是在检查某一特定时间的值。

 if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем

两个相互排斥的条件。那么他是什么时候变高的呢?

 
Roger >> :

那你明白你说的话吗?你是在检查某个时间的值。

两个相互排斥的条件。什么时候变高了?

 if(_price<_sar_value)
           {
           if(_price>=_sar_value)// а потом стал выше, то покупаем

也许我制定的评论是错误的,但本质仍然是真实的,价格水平已经高于指标值,你要买,它就买,但你要做一次,只要存款有钱,EA就会买。你只需要限制交易的数量。一次不做超过一个,这就是没有用的。

 
xruss >> :

但如果历史上有一个卖出订单,然后专家顾问关闭了它(在历史类型中,它(其关闭)显示为T/P或S/L - 它将被视为最后一个?

如果一个订单(买入或卖出)最后被关闭(专家顾问关闭了它,或者它触发了t/p或s/l)并在以下条件下通过

if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicNumber){

那么相应地,它将被视为最后一个。有什么特别的效果是你不能达到的?
 
Everlost >> :

如果一个订单(买入或卖出)最后被关闭(专家顾问关闭它,或t/p或s/l被触发)并通过条件

if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MagicNumber){

那么,相应地,它将被认为是最后一个。而你无法达到的效果到底是什么?

是的,这可能是因为我把OrderMagicNumber()从代码中排除了。

我想避免在订单被关闭后重新开启。我想让我的订单在平仓后不会重新开仓(有时会发生重新开仓的条件仍然存在)。 卖出的情况也是如此。 我认为在我的条件中说明如果我有一个买入头寸并且有利润--而不是重新开出买入头寸,会很酷)。

((

 
xruss писал(а)>>

是的,这可能是因为我在代码中排除了OrderMagicNumber()。

我想让订单在关闭后不会重新打开。我想,如果我在条件中指定,如果我有一个买入头寸并且有利润--不要再重新打开买入,那会很酷。 但它仍然打开--混蛋!))))。

((

控制同时开仓的订单数量的最简单方法

if(OrdersTotal()<1){

   .................
   .................
   условия установки ордеров 

}
 
goldtrader >> :

阅读OrderSend( ...)的描述。

当一个订单被发送到服务器时,魔法号码(magik)被分配给它。

这主要是用来识别待定订单/仓位。

即,使EA不接触 "外来 "订单。这是由EA或脚本完成的。

魔术师不能手动设置。你自己在EA/脚本中设置规则。

魔术师通常是一个静态的,但必要时也可以是动态的。

看看Kodobase的一些简单例子,你就会明白了。

为什么你不能通过票号来识别 "你的 "订单?无论有多少个专家顾问在运行,它们都是独一无二的。

例如,一个EA开了一个订单,记住了这个票据,关闭了它,又忘记了它。

 
mukata >> :

为什么你不能通过票号来识别 "你的 "订单?无论有多少个专家顾问在运行,它们都是独一无二的。

例如,一个EA开了一个订单,记住了票据并忘记了它,之后它又关闭了它。

丘拜斯将切断电力,然后找出其他人的位置和他们的位置。
原因: