初学者的问题 MQL5 MT5 MetaTrader 5 - 页 832

 
void OnTick()
  {
 TimeCurrent(dt); 
//--- Достаточно ли количество баров для работы
   if(Bars(_Symbol,_Period)<10) // общее количество баров на графике меньше 10?
     {
      Alert("На графике меньше 10 баров, советник не будет работать!!");
      return;
     }
//--- сначала нужно записать в массивы значения буферов индиктора Fractal
//--- заполнение данными буфера

   ArraySetAsSeries(Signal,true);
   ArraySetAsSeries(Main,true);

   
   if(CopyBuffer(Stochastic_handle,0,0,100,Main)<=0) return;
   if(CopyBuffer(Stochastic_handle,1,0,100,Signal)<=0) return;

   double Main_1=Main[1];
   Main_1=NormalizeDouble(Main_1,5);
   Print("Main_1=",DoubleToString(Main_1,5));
    
   double Main_2=Main[2];
   Main_2=NormalizeDouble(Main_2,5);
   
   double Main_3=Main[3];
   Main_3=NormalizeDouble(Main_3,5);
   
   double Signal_1=Signal[1];
   Signal_1=NormalizeDouble(Signal_1,5);
   Print("Signal_1=",DoubleToString(Signal_1,5));
   
   double Signal_2=Signal[2];
   Signal_2=NormalizeDouble(Signal_2,5);
   
   double Signal_3=Signal[3];
   Signal_3=NormalizeDouble(Signal_3,5);
   
   
// Для сохранения значения времени бара мы используем static-переменную Old_Time.
// При каждом выполнении функции OnTick мы будем сравнивать время текущего бара с сохраненным временем.
// Если они не равны, это означает, что начал строится новый бар.

   static datetime Old_Time;
   datetime New_Time[1];
   bool IsNewBar=false;

// копируем время текущего бара в элемент New_Time[0]
   int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
   if(copied>0) // ok, успешно скопировано
     {
      if(Old_Time!=New_Time[0]) // если старое время не равно
        {
         IsNewBar=true;   // новый бар
         if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("Новый бар",New_Time[0],"старый бар",Old_Time);
         Old_Time=New_Time[0];   // сохраняем время бара
        }
     }
   else
     {
      Alert("Ошибка копирования времени, номер ошибки =",GetLastError());
      ResetLastError();
      return;
     }
     
     
// открытие покупок

     if(Main_1>Signal_1&&Main_2<Signal_2&&Main_3<Signal_3&&Main_2<20)
     {
      if(IsNewBar!=false)
        {
           
              {
               open_by_market();

              }
        }
     }
  

  // закрытие покупок 
 
   if (Signal_3>80&&Signal_2>80&&Signal_1<80)
   {
   if(PositionsTotal()>0)
        {
         for(int i=0;i<PositionsTotal();i++)
           {
            ulong orders_ticket=PositionGetTicket(i);
            if(((PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) ))
              
              
              {  trade.PositionClose(orders_ticket); }        
            
         }
     }           
   }
 
}
   

日安,请说明如何实现两个任务(以买入信号为例)。

给出:进场点--随机线穿越20点以下

交易结束 - 向下穿过慢速随机线的80水平

即不要像附图中那样在同一水平上建立多个头寸。

2.在第二次,而不是在第一次穿越80级从上到下的缓慢随机线时收盘

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
附加的文件:
121.png  27 kb
 
gastinets:

日安,请说明如何实现两个任务(以买入信号为例)。

给出:进场点--随机线穿越20点以下

交易结束 - 向下穿过慢速随机线的80水平

即不要像附图中那样在同一水平上建立多个头寸。

2)第二笔订单将在第二次,而不是第一次,通过慢速随机线向下跨越80级时关闭。

首先明确提出。

  • 职位空缺的条件
  • 关闭状态

 
请告知如何在构建的专家顾问的OnTick功能 中获取头寸信息。至少,无论它是否开放。我在哪里可以得到位置的指针?还是需要以其他方式进行?
 
VHS:
请告知如何在构建的专家顾问的OnTick功能 中获取头寸信息。至少,如果它是开放的或不开放的。我在哪里可以得到位置的指针?还是需要以其他方式进行?

专家顾问是由谁设计的?

请给我看看代码。
 
与本主题无关的评论已被移至 "MQL4 MT4 MetaTrader 4初学者的问题"。
 
Vladimir Karputov:

专家是由谁设计的?

请出示代码。
专家顾问是由Wizard使用一个自定义信号类和一个自定义交易类设计的。专家顾问本身的代码是标准的。ExtExpert.OnTick()在OnTick中被调用,其余代码使用标准库 构建。其实这个问题是前一个问题的后续,没有人回应。我想让Wizard设计的专家顾问只在开仓时使用自定义信号类,只在交易时关闭,而忽略信号类的信号。我想出了如何忽略信号。但如何在onTick中获得关于是否有未结头寸的信息以实现忽略,我不明白。
 
VHS:
***而且我只通过交易***成交。

这一点并不清楚。

 

VHS:
***а закрывал уже только по трейдингу ***

弗拉基米尔-卡尔普托夫

这一点并不清楚。

键盘上的 "D "和 "L "相邻。我的错误。

 
Artyom Trishkin:

键盘上的 "D "和 "L "相邻。错了。

是的,阿尔乔姆,非常感谢你。显然是自动替换(或歪手)。而自定义的类和关闭不是trayDing,是trayLing。
CExpert类中,处理方法首先进入方向,检查来自信号类的信号。然后(只有在有SelectPosition的情况下),它检查Trailing。因此,如果有一个未平仓的头寸,有时会在没有拖曳类信号的情况下平仓,从信号类得到信号。
之前的变体--从追踪止损类中获取关于未平仓头寸的信息,并通过OnTick将其传递给Ignore--并没有发挥作用。我已经学会了如何在OnInit中记忆尾随对象,并将其转移到OnTick。但它只在职位开放时起作用。但在它被关闭后,处理并没有开始跟踪,忽略仍然被忽略。因此,只有最后一次接触:平仓后,在OnTick中定义这一时刻,并返回忽略值 "0"。但如何在OnTick中有效地获得有关(存在/不存在)头寸的信息,我并不明白。
 
VHS:
是的,Artem,非常感谢你。显然是自动改变(或歪手)。而自定义类和关闭不是trayDing,是trayLing。
CExpert类中,处理方法首先进入方向,检查来自信号类的信号。然后(只有在有SelectPosition的情况下),它检查Trailing。因此,如果有一个未平仓的头寸,有时会在没有拖曳类信号的情况下平仓,从信号类得到信号。
之前的变体--从追踪止损类中获取关于未平仓头寸的信息,并通过OnTick将其传递给Ignore--并没有发挥作用。我已经学会了如何在OnInit中记忆尾随对象,并将其转移到OnTick。但它只在职位开放时起作用。但在它被关闭后,处理并没有开始跟踪,忽略仍然被忽略。因此,只有最后一次接触:平仓后,在OnTick中定义这一时刻,并返回忽略值 "0"。但如何在OnTick中有效地获得有关(存在/不存在)头寸的信息,我并不明白。

我认为你可以让它变得更简单--在你的EA中,将CLOSE阈值设置为100,并给信号以0.5的权重--因此,一个权重为0.5的信号将永远不会超过100的阈值。