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

 
Maxim Kuznetsov:

类似这样的事情。

string level="Level"+IntegerToString(iTime(_Symbol,iBarShift(OrderCloseTime())); // ид.уровня - по времени бара (!! не по тикету)

if (ObjectFind(level)‌==-1) {

  // гор.вектора нет - видимо первый ордер из закрытых на баре

  // сделать горизонтальную линию‌

  ObjectCreate(0,level,OBJ_TREND,0,OrderCloseTime(),OrderClosePrice(),OrderCloseTime()+PeriodSeconds(_Period)*3,OrderClosePrice);

 // указывающую только вправо‌

  ObjectSetInteger(level,‌OBJPROP_RAY,1);

  ObjectSetInteger(level,OBJPROP_RAYLEFT,0);

‌ // украсить её как-то :-)

 ObjectSetInteger(level,OBJPROP_‌COLOR,....)

 ....‌

} else {

  // гор.уровень есть - значит были ордера закрытые на этом баре

  // по фантазии - обновить метки/корректировать уровень/etc‌

}‌

int TotalPos=-1;

void start()
 
{
 // остальной код

//--
  if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      History();

  
     }
  }}} TotalPos=OrdersTotal(); // запомним количество
//--
}
 
 
 
 void History() {
  string Ticket=(string)OrderTicket();
  color col=Red;
  if(OrderType()==0)col=Blue;
  datetime a=OrderOpenTime();
  double b=OrderOpenPrice();
  datetime c=OrderCloseTime();
  double d=OrderClosePrice();
  double prSep=OrderProfit()+OrderCommission()+OrderSwap();
  double prAll=0;
  int    cn=0;
  string hTicket;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      datetime ct=OrderCloseTime();
      // 60 секунд разницы между закрытием первой и последней в сетке
      if(c<=ct+60 && c>=ct-60) {
        prAll+=OrderProfit()+OrderCommission()+OrderSwap();
        hTicket=(string)OrderTicket();
        cn++;
      }
   }}}
   ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
     
   ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
   ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
     
   ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
   ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
 
   Ticket=cn>1?hTicket:Ticket;
   ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+"Profit",OBJPROP_ANCHOR,0);
   ObjectSetText(Ticket+"Profit",DoubleToString(prAll,2),10,"Arial",White);
   ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d);
   ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+Period()*60*2);
}

使用矢量作为水平仪是错误的....不是很好 ....((

如果我们让一匹马动起来呢)

在水平搜索中,使用已经存在记录的价格水平的利润总和原则......

例如:这里我们做了一个尝试,并在60秒延迟的情况下将利润加起来

 for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      datetime ct=OrderCloseTime();
      // 60 секунд разницы между закрытием первой и последней в сетке
      if(c<=ct+60 && c>=ct-60) {
        prAll+=OrderProfit()+OrderCommission()+OrderSwap();
        hTicket=(string)OrderTicket();
        cn++;

接下来,我们需要想出一个记录。

如果该级别的累计利润数>1,那么这就是我们的订单--我们的级别,从这个级别开始我们画一条射线

 

问候。

我正在计划一个带有功能的EA,在每一个tick 上都会循环查看它所创建的可用订单并根据情况采取行动。

您能告诉我们如何为每一个新的订单制作单独的变量,以及如何进一步的循环来处理它们 吗?(我想这是类似于Peremennaja+ticket=12345;)

 
Andrey Sokolov:

问候。

我正在计划一个带有功能的EA,在每一个tick 上都会循环查看它所创建的可用订单并根据情况采取行动。

您能告诉我们如何为每一个新的订单制作单独的变量,以及如何进一步的循环来处理它们 吗?(我想这是类似于Peremennaja+ticket=12345;)

最好是一个数组,甚至是一个结构数组。
 
Alexey Viktorov:
最好是一个数组,甚至是一个结构数组。

对不起,你能详细说明一下吗?
 
Andrey Sokolov:

对不起,你能说得更详细些吗?


这里这里

一个结构和一个结构类型的数组被创建。在所有的代码之外。

struct trade_settings
  {
   double take;         // значения цены фиксации прибыли
   double stop;         // значение цены защитного стопа
   uchar  slippage;     // значение допустимого проскальзывания
  };
//--- создали массив типа trade_settings
trade_settings my_set[];
// присвоить значение нулевому индексу массива в основном коде
my_set[0].take = что_то;
Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4
Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4
 

你好。

请帮助我找到水平线"ResisL"和趋势线的交角"TrndL"。

TRA
 
Nikolay Fedyay:

你好。

请帮助我找到水平线"ResisL"和趋势线的交角"TrndL"。

//+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
double EquationDirect(double left_bar, double left_price, double right_bar, double right_price, double bar_to_search) {
  return((right_bar==left_bar)?left_price:(right_price-left_price)/(right_bar-left_bar)*(bar_to_search-left_bar)+left_price);
}
//+------------------------------------------------------------------+
如果你知道斜率线的两个坐标点,并将其作为该函数的参数粘贴,输出结果将给出bar_to_search上该点的价格。只剩下在条形循环中调用这个函数,将其返回的值与水平线的价格进行比较。如果在周期的最后一个条形上,函数返回的值低于或等于水平线的价格,而在周期的当前条形上,函数返回的值大于水平线的价格,那么交点的X坐标将是周期指数对应的时间,Y坐标将是函数返回的价格。
 
Artyom Trishkin:

谢谢你。

如果你想知道还没有条形图时的交叉点,即未来的某个日期,那又如何呢?

 
Nikolay Fedyay:

谢谢你。

如果你想知道还没有条形图时的交叉点,即未来的某个日期,那又如何呢?

没试过这个功能--需要实验。

 
Artyom Trishkin:

没试过这个功能--需要实验。

如果你有时间做实验,请分享结果。

因为我不知道该用 什么做实验
.

原因: