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

 
Valeriy Yastremskiy #:
被触摸/交叉-移动的算法不起作用?

困难,我想交出已经合适的东西。他只需对水平进行可视化,并将停止点移至过去的水平,这就足够了。没想到会有这样的收获。如果他没有离开很长时间,我就会这样做,但不是现在。我不想要套利,我已经有了。

 

如果step:=:const,那么就简单地显示从当前止损开始的给定步长的水平。还有什么能比这更简单的呢。

 
Maxim Kuznetsov #:

如果step:=:const,那么就简单地显示从当前止损开始的给定步长的水平。还有什么能比这更简单的呢。

是的算法我明白。打开一个窗口,写下发生了什么事?略有不同的条件,要深入研究和写作。

P.S. 在其他情况下,我不会问。

 
请告知谁知道,我无法在演示版上开出订单,写的是排队等候的一般错误!问题是什么?
 
Maxim Kuznetsov #:

最有可能的是--ex4是用一个旧的编译器建立的。终端已被更新,但EA是古老的孤儿。我们需要联系作者

第二种选择--签名不匹配(或因技术原因未验证)。你只需要等待DNS更新,连接就会建立起来。

假设的选项--作者被永久禁言。看看他的资料

总结一下:首先你要向作者提问。

谢谢你

 
Vitaly Muzichenko #:

困难,我想交出已经合适的东西。他只需对水平进行可视化,并将站台移到过去的水平,这就足够了。没想到会有这样的收获。如果他没有离开很长时间,我就会这样做,但不是现在。我不想要套利,我已经有了。

Oninit计算水平和绘制。为了一项不同的任务,但就在附近。你的部分是为绝对水平。

Zy,我当然没有什么错。我需要了解订单、头寸和拖网是如何被追踪的,画起来很容易,但当你达到一个水平时,你要么改变水平的颜色,要么删除水平线。
附加的文件:
 
Valeriy Yastremskiy #:

OnInit计算水平并绘制。为了不同的任务,但并排在一起。你的部分是为绝对水平。

Zy,我当然没有什么不妥之处。我需要了解订单、头寸和拖网是如何被追踪的,那时很容易画出来。但当你达到一个水平时,你要么改变水平的颜色,要么删除横线。

什么可以)))),需要添加触发标志到交叉功能。没有时间。

input double   PriceOrder=0.0;         // Цена ордера, 
input int TralStep=300;                  // Шаг отслеживания SL  
input int NumberLevels=7;            // Kоличество уровней для выбранного метода ВВЕРХ

input bool FlagShowLine=true;              // Рисовать / не рисовать уровни



//---


double LevelPrice[10];                 // Количество уровней не более 10.
string HLineName[10];
bool Del=true;

string MsgAlert,Tip;

int CurLevel;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---Расчет ценовых уровней

CalculationOfLevels(PriceOrder,TralStep,NumberLevels,Tip);



if(FlagShowLine)
{
ShowLine(Tip);
}
//--- create timer
   EventSetTimer(60);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  
  Comment("");
  
   int obj_total=ObjectsTotal();
      PrintFormat("Всего %d объектов",obj_total);
      for(int i=obj_total-1; i>=0; i--)
        {
         string name=ObjectName(i);
 //        PrintFormat("Объект %d: %s",i,name);
         ObjectDelete(name);
        }
//--- destroy timer
   EventKillTimer();
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   CrossingLevel(CurLevel,Tip);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//---
   double ret=0.0;
//---

//---
   return(ret);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| Создает горизонтальную линию                                     | 
//+------------------------------------------------------------------+ 
bool HLineCreate(const long            chart_ID=0,        // ID графика 
                 const string          name="HLine",      // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 double                price=0,           // цена линии 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1,           // толщина линии 
                 const bool            back=true,        // на заднем плане 
                 const bool            selection=false,    // выделить для перемещений 
                 const bool            hidden=false,       // скрыт в списке объектов 
                 const long            z_order=0)         // приоритет на нажатие мышью 
  { 
//--- если цена не задана, то установим ее на уровне текущей цены Bid 
   if(!price) 
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID); 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим горизонтальную линию 
   if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError()); 
      return(false); 
     } 
//--- установим цвет линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
//--- установим стиль отображения линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 
//--- установим толщину линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 
//--- отобразим на переднем (false) или заднем (true) плане 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
//--- включим (true) или отключим (false) режим перемещения линии мышью 
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект 
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection 
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
//--- установим приоритет на получение события нажатия мыши на графике 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
//--- успешное выполнение 
   return(true); 
  } 
  
  //+------------------------------------------------------------------+
  //| Поиск ближайших уровней                                          |
  //+------------------------------------------------------------------+  
void  ShowModify(string name, string tip, bool del)
  {
  if(del){
ObjectDelete(name);
  }
  if(!del){
 if(tip=="Sell"){
  ObjectSetInteger(0,name,OBJPROP_COLOR,clrGold);
 } 
  if(tip=="Buy"){
  ObjectSetInteger(0,name,OBJPROP_COLOR,clrCoral);
 } 
 }
 }
 
 //+------------------------------------------------------------------+
 //| Мониторинг пересечения уровней                                   |
 //+------------------------------------------------------------------+
 
bool CrossingLevel(int level, string tip)
{
if((tip=="Buy" && Bid > LevelPrice[level]) || (tip=="Sell" && Ask < LevelPrice[level])){
CurLevel=level++ ;
return(true);
}
return(false);
}



void CalculationOfLevels(double priceorder, int trstep, int numberl, string tip){

//---Расчет ценовых уровней

for(int i=0; i<=(numberl); i++){
if(tip=="Buy"){
LevelPrice[i] =  priceorder + trstep*Point;
if(tip=="Sell"){
LevelPrice[i] =  priceorder - trstep*Point;

}
}
CurLevel=1;
}
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ShowLine(string tip)
{
color ClrLine=clrRed;
if(tip=="Buy") ClrLine=clrBlue;
if(tip=="Sell") ClrLine=clrRed;
for(int i=0;i<=(NumberLevels);i++){

//Alert("ShowLine_",ShowLine,"__",LevelPrice[i],"__",ClrLine);
HLineName[i]="LevelPrice_"+(string)i+"_"+(string)LevelPrice[i];

HLineCreate(0,HLineName[i],0,LevelPrice[i],(color)ClrLine,STYLE_SOLID,1);
}
}
附加的文件:
ShowLevel.mq4  16 kb
 
Valeriy Yastremskiy #:

我可以做的)))需要在交叉函数中添加触发标志。没有时间。

这有点离谱。

我有一个很久以前写的EA,但它是一个显示将在哪里开仓的EA。


现在我需要在拖网代码中增加一个内容,在拖网将被触发的地方画出这样的线。

这个任务很复杂,因为拖网式EA是在一个图表上设置的,应该在所有有未结头寸的图表上画线。

附加的文件:
 
Vitaly Muzichenko #:

这有点离谱。

我有一个写了很久的这样的东西,但它是一个带有显示将在哪里开仓的EA


现在我们需要在拖网的代码中增加一个内容,在拖网将被触发的地方画出这样的线。

这个任务很复杂,因为拖网式EA是在一个图表上设置的,应该在所有有未结头寸的图表上画线。

是所有的窗口都已经打开,还是在出现头寸时由EA打开?挑战在于找到一个图表)
 
Valeriy Yastremskiy #:
是所有的窗口都已经打开,还是在出现头寸时由EA打开?挑战在于找到一个图表)

我认为,如果有一个位置,窗口是开放的。