新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 194

 
谁知道--如果你关闭部分订单,它的魔术师或评论会不会消失?
 
Renat Akhtyamov:
谁知道--如果你关闭部分订单,它的魔力或评论就会消失?

魔术将保留,订单票 将改变,评论将包含来自#xxxxxxxxxxx的父母订单票。父订单将有一个子订单票:to#xxxxxxxxxxx

 
Artyom Trishkin:

魔术将保留,订单票 将改变,评论将包含来自#xxxxxxxxxxx的父母订单票。父订单将有一个子订单票:to#xxxxxxxxxxx

好的。谢谢你!
 
geratdc:


是的,这个K也在顶帽的外部变量 中--也许是某个函数的返回值......。


阿列克谢,你对我的问题能说些什么?我尝试在反向订单上附加追踪止损。你是否遇到过这样的问题?

而为了回答这个问题的东西,你必须了解问题本身。而从这个

geratdc:

我需要帮助 - 我有3个止损单,但视频教程中的跟踪止损的例子:)只适用于非连接的订单,在我的情况下,它们是通过算法连接的,即止盈是由三个订单的总和计算的,如果我进入了一个趋势,则由一个订单计算。好吧,我已经想到了一些东西,但我的专家顾问并没有开始赚取更多的钱--它已经开始赚取相同数量的订单,但与我以前的没有跟踪的EA相比,我得到的交易量要少2-3倍。因此,我的追踪不是追踪,而是一些胡言乱语。我应该如何把它放在链接的订单上? 谁能给我一个主意?我恐怕想不出别的办法了。 这是我 "跟踪 "的结果--它以蓝色显示。

附上1个测试的结果。那里到底有没有尾随止损?我不明白。为什么同一时期的利润没有增加?只有交易的数量 减少了2-3倍?


我无法理解任何事情。最奇怪的是,"我发明了一些东西",但你是否了解你所发明的东西?而这是"我如何在链接的订单上做"。但接下来是"恐怕我想不出别的 办法了"。

 
Alexey Viktorov:

而为了回答任何有关问题,你必须了解问题本身。而从这一点来看。

我什么都听不懂。最奇怪的是"我已经想通 了",但你知道你想通了什么吗?然后是"我如何在联动权证上做到这 一点?"但接下来是"恐怕我想不出别的 办法了"。


根据我的理解,跟踪止损不能正确地应用于订单,所以我们应该非常注意这个函数CalculateProfit,即变量 "op",根据这个变量,如果所有3个订单的利润之和等于TakeProfit,订单就会被关闭,并尝试通过这个变量进行拖拽。我将努力在这个方向上想出一些办法。我理解与第三方abracadabra)))),这是很难处理的。
 
geratdc:

根据我的理解,追踪止损不能正确地应用于订单,这就是为什么我们应该仔细看看这个函数CalculateProfit,特别是变量 "op",根据这个变量,如果所有3个订单的利润之和等于TakeProfit,订单将被关闭,并尝试通过这个变量追踪。我将努力在这个方向上想出一些办法。我理解,很难处理第三方的abracadabrasions)))。
为什么你不能应用它?有必要不要在别人的功能上附加或发明一些东西,而要写出自己的功能,让它们执行你想要的一切。可能是什么问题?无论有多少订单,都要计算出平均价格并从中拖动。当某些条件得到满足时,当通过循环中的所有订单时,在一个新的水平上重新安排它们的止损,这个水平是由一个方向上存在的所有订单的平均价格计算出来的。
 
//+------------------------------------------------------------------+
//|                                     BLACKJACK&HOOKERS TrailX.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double  Lots           = 0.01;
extern double  TakeProfit     = 1;
extern int     Step           = 1;

extern double  TrailXStep     = 1;
extern double  TrailXStop     = 1;

extern int     MaPeriod       = 100;
extern int     MaShift        = 1;

extern int     Magic          = 123;
extern int     Slippage       = 5;

int timeprev=0;

extern double price,op,cn,tp;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(Digits == 3 || Digits == 5)
      //TakeProfit     *= 10;
      Step           *= 10;
      //TrailXStep     *= 10;
      //TrailXStop     *= 10;
      Slippage       *= 10;

      
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   if (timeprev == Time[0]) return;
   timeprev = Time[0];
   double maprice=iMA(Symbol(),0,MaPeriod,MaShift,MODE_SMA,PRICE_CLOSE,1); 
   op=CalculateProfit();
   cn=CountTrades();
   tp=TakeProfit;
   if (tp>TakeProfit)
   {
      TakeProfit+=tp;
   }
   
 

 
   if (cn==0 && CountBuy() + CountSell() == 0 && Ask > maprice)
   {
      if (OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue)<0)
            Print("Не удалось открыть ордер на покупку");
            
   }
   
   if (cn==0 && CountBuy() + CountSell() == 0 && Bid < maprice)
   {
      if (OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red)<0)
            Print("Не удалось открыть ордер на продажу");
            
   }
   

   
   if(cn==1 && CountBuy()==1) 
   {
      price=FindLastBuyPrice();
      if((price-Ask)>=Step*Point)
      {
         if(OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",Magic,0,Red)<1)
            Print("Не удалось открыть ордер на продажу");
      }
   }
   else if(cn==1 && CountSell()==1) 
   {
      price=FindLastSellPrice();
      if((Bid-price)>=Step*Point)
      {
         if(OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue)<1)
            Print("Не удалось открыть ордер на покупку");
      }
   }
   
   
   
   if(cn==2 && CountBuy()==1 && CountSell()==1) 
   {
      price=FindLastSellPrice();
      if((price-Bid)>=Step*Point)
      {
         if(OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",Magic,0,Red)<1)
               Print("Не удалось открыть ордер на продажу");
               
      }
      else 
      price=FindLastSellPrice();
      if((Bid-price)>=Step*Point)
      {
         if(OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue)<1)
            Print("Не удалось открыть ордер на покупку");
           
      }
   }
   else if(cn==2 && CountSell()==1 && CountBuy()==1) 
   {
      price=FindLastBuyPrice();
      if((Ask-price)>=Step*Point)
      {
         if(OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue)<1)
               Print("Не удалось открыть ордер на продажу");
               
      }
      else 
      price=FindLastBuyPrice();
      if((price-Ask)>=Step*Point)
      {
         if(OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",Magic,0,Red)<1)
            Print("Не удалось открыть ордер на покупку");
           
      }
   }
   
   Trailing();

   if (op>=tp)
   {
         CloseAll();    
   }


}    
//---------------------------------------------------------------------------------------
void Trailing()           
            {  

               if (op > (TakeProfit+TrailXStep))
               {
                  tp=(TakeProfit+TrailXStep);
               }
               if (op > (TakeProfit+TrailXStep-TrailXStop) && op < (TakeProfit+TrailXStep+TrailXStop))
               {
                  tp=(TakeProfit+TrailXStep-TrailXStop);
               }
               
            }
//---------------------------------------------------------------------------------------
double CalculateProfit()
  {
   double oprofit=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               oprofit+=OrderProfit();
              }
           }
        }
     }
   return(oprofit);
  }
//--------------------------------------------------------------------------------------
void CloseAll()
  {
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage))
                  Print("Не удалось закрыть ордер на покупку");
              }
            if(OrderType()==OP_SELL)
              {
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage))
                  Print("Не удалось закрыть ордер на продажу");
              }
           }
        }
     }
  }
//---------------------------------------------------------------------------------------------------
double FindLastBuyPrice()
  {
   int oldticket,ticket= 0;
   double oldopenprice = 0;
   for(int cnt=OrdersTotal()-1; cnt>=0; cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
           {
            oldticket=OrderTicket();
            if(oldticket>ticket)
              {
               ticket=oldticket;
               oldopenprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oldopenprice);
  }
//---------------------------------------------------------------------------------------------------
double FindLastSellPrice()
  {
   int oldticket,ticket= 0;
   double oldopenprice = 0;
   for(int cnt=OrdersTotal()-1; cnt>=0; cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
           {
            oldticket=OrderTicket();
            if(oldticket>ticket)
              {
               ticket=oldticket;
               oldopenprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oldopenprice);
  }
//----------------------------------------------------------------------------------------------
int CountBuy()
  {
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
     {
      if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
            count++;
        }
     }
   return(count);
  }
//----------------------------------------------------------------------------------------------
int CountSell()
  {
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
     {
      if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
            count++;
        }
     }
   return(count);
  }
//+---------------------------------------------------------------------------------+
int CountTrades()
{
    int count=0;
    for (int i=OrdersTotal()-1; i>=0; i--)
      {  
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                  count++; 
         }
      }
      return(count);
}
//----------------------------------------------------------------------------------+
int FindLastOrderType()
{
      for(int i = OrdersTotal()-1; i>=0; i--)
      {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            return(OrderType());
         } 
      }
      return(-1);
}
//----------------------------------------------------------------------------------+

这是由CalculateProfit()函数进行追踪的变体,两种追踪变体在交易中都有相同的指标--在交易数量 和利润方面。盈利不多--现在我将增加波动性和更准确的进入指标。我认为一个相同的指标可以解决这些问题,对吗?例如,分析最后5个小节或类似的东西。这种条形指标叫什么?什么是最好的时间框架?请分享你的想法,我怎样才能用一个指标获得两只鸟......。我有一石二鸟:)

你是如何看待 这个EA的尾巴的?

 
Alexey Viktorov:
为什么你不能应用它?你不必在别人的功能上附加或发明一些东西,但要写出你自己的功能,使它做你想做的事。可能是什么问题?无论有多少订单,都要计算出平均价格并从中拖动。当某些条件得到满足时,在浏览循环中的所有订单时,在一个新的水平上重新安排它们的止损,这个水平是由一个方向的所有订单的平均价格计算出来的。

保存了它,谢谢你。我还不这么认为。我的脑子里应该有一个代码和函数库,而在视频教程中,我们已经经历了我到目前为止所实现的所有东西。也许我会变得更好,把你的建议付诸实践。我今天发明的东西,看起来像个拖网吗?好吧,专家 顾问根据报告进行拖网,但我不知道哪一个是正确的--不正确的拖网只会增加损失的概率。我想说它有0.9的失败概率,大概是这样))))我想说的是,现在很怕平,指标很弱--我们只是加入了趋势,当我们有3个订单时,市场突然改变了方向,给我们带来了缩水--我们就没钱了。
 
geratdc:

保存了它,谢谢。我还不能这样想。我脑子里一定有一个代码和函数库,我已经看了视频教程,这就是我现在使用的东西。也许我会变得更好,把你的建议付诸实践。我今天发明的东西,看起来像个拖网吗?好吧,专家 顾问根据报告进行拖网,但我不知道哪一个是正确的--不正确的拖网只会增加损失的概率。我想说它有0.9的失败概率,大概是这样))))我想说的是,现在很怕平,指标很弱--我们只是加入了趋势,当我们有3个订单时,市场突然改变了方向,给我们带来了缩水--我们就没钱了。

好吧,我会尽力多做一点事情来教育你。

我在发送时将称呼你为 "你"。我有一张指针的快照...

请告诉我,在同一个刻度上调用同一个函数5次,不觉得不妥吗?但这是麻烦的一半。这个函数会浏览所有的订单。而这一切在一次勾选中进行了5次......而我算上4个这样的功能。我们可以很容易地在循环中再装上3个函数来搜索所有的订单,而不必绞尽脑汁。

下面是其中的两个。

if (cn==0 && CountBuy() + CountSell() == 0 && Ask > maprice)
if (cn==0 && CountBuy() + CountSell() == 0 && Bid < maprice)
if(cn==1 && CountBuy()==1)


else if(cn==1 && CountSell()==1) 
if(cn==2 && CountBuy()==1 && CountSell()==1) 


else if(cn==2 && CountSell()==1 && CountBuy()==1)

这些是 .

Trailing();


}    
//---------------------------------------------------------------------------------------
void Trailing()           
            {  

               if (op > (TakeProfit+TrailXStep))
               {
                  tp=(TakeProfit+TrailXStep);
               }
               if (op > (TakeProfit+TrailXStep-TrailXStop) && op < (TakeProfit+TrailXStep+TrailXStop))
               {
                  tp=(TakeProfit+TrailXStep-TrailXStop);
               }
               
            }


它甚至还没有接近拖后腿。

为了理解这一点,我们需要清楚地了解尾随的定义。我不能逐字记忆,但可以用以下方式描述:"跟随价格移动止损位,以减少可能的损失或增加 "保证 "的利润。


而这

extern double price,op,cn,tp;

当你运行专家顾问时,它看起来像什么?可能是四条线...是否需要它们?


今天的最后一件事:你不需要在你的脑子里有一个图书馆。有文件并知道如何使用它就足够了。我仍然记不住iMA(_Symbol, _Period, ,,,,,)的所有参数,进一步说我是在看了文档后才写的。因此,几乎所有的功能。幸运的是,他们不久前制作了工具提示,这并没有什么帮助。我不是要记住如何写这些或那些枚举。所以我每次都要看一下文件。

 

你能告诉我哪个函数检查这个复选框的状态吗?