一个非常有用的指标 - 页 3

 
Vitalii Ananev:

你们有类似QuickBooks的东西吗?

不,我只为KVIC写专家,而且是用Delphi写的。

 
prostotrader:

不,我只为KVIC写专家,而且是用Delphi。

这是个遗憾。我的经纪人只有快餐式的。我正在努力掌握lua,但在MT之后,我就不觉得lua了。我从来没有尝试过使用它,因为它似乎太复杂了,一目了然,令人困惑。而且我找不到任何有评论的正常例子。

 
prostotrader:

你要兜售的东西很糟糕。

但画面很美)。

我宁愿用这个傻瓜上网,而不是看图表,它更有用。

 
Vitalii Ananev:

遗憾的是。我的经纪人只有quickie。我正在努力掌握lua,但在MT之后,我不觉得自己是lua。一看就很混乱,很复杂。而且你不会找到任何有评论的好例子。

最糟糕的事情不是这个,而是没有正常的调试器。

所以你根本无法测试任何大的东西!

 
__zeus__:

我宁愿用这些垃圾上网,也不愿把自己埋在图表里,这更有用。

我已经告诉过你,做你喜欢的事。

 
prostotrader:

最糟糕的部分不是这个,而是没有合适的调试器。

所以你根本无法测试任何大的东西!

这也很吓人。我看到有一个DDE数据输出。在设置中,它说要指定DDE服务器。在这些例子中,到处都看到了EXCEL的使用。我不明白这只是一个术语上的错误,还是真的如此。Excel应该在那里被指定为DDE服务器, 我认为应该是反过来的--Excel是DDE客户端和Quick DDE服务器。数据是从Quicksilver转移到Excel,而不是相反。

 

这里有一个有用的指标。

而现在这个TS的作用(货币是高度波动的),但

不幸的是,只有在演示中

由于MT5有很大的延迟,这个TS(合成Eu)。

将是无利可图的,尽管从本质上讲,它是100%的盈利。

Eu(自然) = Si * ED

谁有兴趣,可以 "玩"。

想象一下,那些现在 "坐在 "2号广场上的人(没有延误)!

//+------------------------------------------------------------------+
//|                                                     Eu_ED_Si.mq5 |
//|                                          Copyright 2015, Mikalas |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015"
#property link      "http://www.mql5.com"
#property version   "1.01"
#define  on_call -1111
//
#property indicator_separate_window

#property indicator_buffers 2
#property indicator_plots   2

//--- plot Label1
#property indicator_label1  "Ask"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

//--- plot Label1
#property indicator_label2  "Bid"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRoyalBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- Levels
#property indicator_level1 0
#property indicator_level2 0
#property indicator_level3 0
#property indicator_level4 0

//---
#property indicator_levelwidth 1
//---
#property indicator_levelstyle STYLE_DOT
//
string ed_symbol;
string si_symbol;
string symb_info;
string eu_b_name;
string si_b_name;
string ed_b_name;
//
input long   LevUp     = 100;   //Макс. уровень индикатора
input long   LevDown   = -100;  //Мин. уровень индикатора
input long   Comis     = 8;    //Комиссии (пункты)  
input long   LevelHigh = 15;   //Линия верхнего уровня (пункты)  
input long   LevelLow  = -15;  //Линия нижнего уровня (пункты)  
input long   EntHigh   = 20;   //Вхрод вверху (пункты)
input long   ExitHigh  = 5;    //Выход вверху (пункты)
input long   EntLow    = -20;  //Вход внизу (пункты)
input long   ExitLow   = -5;   //Выход внизу (пункты)

//--- indicator buffers
double AskBuffer[];
double BidBuffer[];
double eu_sell_price, eu_buy_price,
       ed_sell_price, ed_buy_price,
       si_sell_price, si_buy_price;
double max_value, min_value;   
double si_point, eu_point, ed_point;    
//
int event_cnt;
bool eu_book;
bool si_book;
bool ed_book;
//
enum EXP_STATE
{
  POS_NONE = 0,
  POS_HIGH = 1,
  POS_LOW  = 2
};
struct MEM_PRICES
{
  double eu_price;
  double ed_price;
  double si_price;
};

EXP_STATE exp_state;
MEM_PRICES mem_prices;
long profit;
//+------------------------------------------------------------------+
//| Indicator Set second Symbols function                            |
//+------------------------------------------------------------------+
void SetSecondSymbols( const string aSymbol, string &s_info )
{
  int str_size = StringLen( aSymbol );
    
  for( int i = 0; i < str_size; i++ )
  {
    ushort let_symbol = StringGetCharacter( aSymbol, i );
    if ( let_symbol == '-')
    {
      string hvost = StringSubstr( aSymbol, i, str_size - i );
      s_info = StringSubstr( aSymbol, 0, i );
      
      if ( s_info == "Eu" )
      {
        si_symbol = "Si" + hvost;
        ed_symbol = "ED" + hvost;
      }
      break;
    }
  }
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
  profit = 0;
  exp_state = POS_NONE;
  max_value = -DBL_MAX;
  min_value = DBL_MAX;
  eu_book = 0;
  si_book = 0;
  ed_book = 0;
  event_cnt = 0;
  SetSecondSymbols(Symbol(), symb_info);
  if(symb_info != "Eu")
  {
    Print("Индикатор должен быть только на символе 'Eu'!");
    return(INIT_FAILED);
  }
//---
  if(!SymbolSelect(ed_symbol, true))
  {
    Print("Нет сивола 'ED'!");
    return(INIT_FAILED);
  }
  if(!SymbolSelect(si_symbol, true))
  {
    Print("Нет сивола 'Si'!");
    return(INIT_FAILED);
  }  
//---
  eu_point = Point();
  ed_point = SymbolInfoDouble(ed_symbol, SYMBOL_POINT);
  si_point = SymbolInfoDouble(si_symbol, SYMBOL_POINT);  
//--- Add book
  eu_book = MarketBookAdd(Symbol());
  if(eu_book == false)
  {
    Print("Стакан символа " + Symbol() + " не добавден!");
    return(INIT_FAILED);
  }
  ed_book = MarketBookAdd(ed_symbol);
  if(ed_book == false)
  {
    Print("Стакан символа " + ed_symbol + " не добавден!");
    return(INIT_FAILED);
  }
  si_book = MarketBookAdd(si_symbol);
  if(si_book == false)
  {
    Print("Стакан символа " + si_symbol + " не добавден!");
    return(INIT_FAILED);
  }
//---  
  IndicatorSetInteger( INDICATOR_DIGITS, Digits() );
  IndicatorSetString( INDICATOR_SHORTNAME, "Eu_Ask_Bid" );
//---  
  SetIndexBuffer( 0, AskBuffer, INDICATOR_DATA );
  PlotIndexSetDouble( 0, PLOT_EMPTY_VALUE, EMPTY_VALUE );
  ArraySetAsSeries( AskBuffer, true );
//---
  SetIndexBuffer( 1, BidBuffer, INDICATOR_DATA );
  PlotIndexSetDouble( 1, PLOT_EMPTY_VALUE, EMPTY_VALUE );
  ArraySetAsSeries( BidBuffer, true );
//---
  IndicatorSetInteger(INDICATOR_LEVELCOLOR, 0, clrAqua);
  IndicatorSetInteger(INDICATOR_LEVELCOLOR, 1, clrAqua);
  IndicatorSetInteger(INDICATOR_LEVELCOLOR, 2, clrRed);
  IndicatorSetInteger(INDICATOR_LEVELCOLOR, 3, clrRoyalBlue); 
//---
  IndicatorSetDouble(INDICATOR_LEVELVALUE, 0, LevelHigh);
//  IndicatorSetDouble( INDICATOR_LEVELVALUE, 1, LevelExitHigh );
  IndicatorSetDouble(INDICATOR_LEVELVALUE, 1, LevelLow);

  IndicatorSetDouble(INDICATOR_MAXIMUM, LevUp);
  IndicatorSetDouble(INDICATOR_MINIMUM, LevDown);
//---
  //---Set objects
   int window=ChartWindowFind(ChartID(),"Eu_Ask_Bid");
   ObjectCreate(ChartID(),"Eu_label_1",OBJ_LABEL,window,0,0);
   ObjectSetInteger(ChartID(),"Eu_label_1",OBJPROP_YDISTANCE,20);
   ObjectSetInteger(ChartID(),"Eu_label_1",OBJPROP_XDISTANCE,0);
   ObjectSetInteger(ChartID(),"Eu_label_1",OBJPROP_COLOR,clrWhite);
   ObjectSetString(ChartID(),"Eu_label_1",OBJPROP_TEXT,"Position: " + EnumToString(exp_state));
   ObjectCreate(ChartID(),"Eu_label_2",OBJ_LABEL,window,0,0);
   ObjectSetInteger(ChartID(),"Eu_label_2",OBJPROP_YDISTANCE,40);
   ObjectSetInteger(ChartID(),"Eu_label_2",OBJPROP_XDISTANCE,0);
   ObjectSetInteger(ChartID(),"Eu_label_2",OBJPROP_COLOR,clrLime);
   ObjectSetString(ChartID(),"Eu_label_2",OBJPROP_TEXT,"Profit: " + string(profit) + " points");
//---
  ChartRedraw();
  return( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
// Custom indicator DeInit function                                  |
//+------------------------------------------------------------------+
void OnDeinit( const int reason )
{
  ObjectDelete(ChartID(),"Eu_label_1");
  ObjectDelete(ChartID(),"Eu_label_2");
//---  
 if (eu_book == true) MarketBookRelease(Symbol());
 if (ed_book == true) MarketBookRelease(ed_symbol);
 if (si_book == true) MarketBookRelease(si_symbol);
//---  
  if(reason == REASON_INITFAILED)
  {
    Print("Индикатор удалён! Причина - ошибка инициализации.");
    string short_name = ChartIndicatorName( ChartID(), 1, 0);
    ChartIndicatorDelete(ChartID(), 1, short_name); 
  }
}
//+------------------------------------------------------------------+
// Custom indicator On book event function                           |
//+------------------------------------------------------------------+
void OnBookEvent( const string& a_symbol )
{
  if((a_symbol == Symbol()) || (a_symbol == ed_symbol) || (a_symbol == si_symbol))
  {
    eu_sell_price = SymbolInfoDouble(Symbol(), SYMBOL_ASK);
    eu_buy_price = SymbolInfoDouble(Symbol(), SYMBOL_BID);
    ed_sell_price = SymbolInfoDouble(ed_symbol, SYMBOL_ASK);
    ed_buy_price = SymbolInfoDouble(ed_symbol, SYMBOL_BID);
    si_sell_price = SymbolInfoDouble(si_symbol, SYMBOL_ASK);
    si_buy_price = SymbolInfoDouble(si_symbol, SYMBOL_BID);
//---
    double price[]; 
    OnCalculate( event_cnt, event_cnt, on_call, price ); 
  }
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[] )

{
  if(prev_calculated == 0)
  {
    ArrayInitialize(AskBuffer, EMPTY_VALUE);
    ArrayInitialize(BidBuffer, EMPTY_VALUE); 
  }
  else
  {
    if(begin == on_call)
    {
      for(int i = rates_total - 1; i > 0; i--)
      {
        AskBuffer[i] = AskBuffer[i - 1];
        BidBuffer[i] = BidBuffer[i - 1];
      }
    }
    if((ed_sell_price > 0) && (si_sell_price > 0) && (eu_sell_price > 0) &&
       (ed_buy_price > 0) && (si_buy_price > 0) && (eu_buy_price > 0))
    {
      AskBuffer[0] = ed_sell_price * si_sell_price - eu_buy_price;
      BidBuffer[0] = ed_buy_price * si_buy_price - eu_sell_price;
      if ( AskBuffer[0] < min_value ) min_value = AskBuffer[0];
      if ( BidBuffer[0] > max_value ) max_value = BidBuffer[0];
      IndicatorSetDouble(INDICATOR_LEVELVALUE, 2, min_value);
      IndicatorSetDouble(INDICATOR_LEVELVALUE, 3, max_value);
      switch (exp_state)
      {
        case POS_NONE:
          if(BidBuffer[0] >= (EntHigh * Point()))
          {
            mem_prices.eu_price = eu_sell_price;
            mem_prices.ed_price = ed_buy_price;
            mem_prices.si_price = si_buy_price;
            exp_state = POS_HIGH;
          }
          else
          if(AskBuffer[0] <= (EntLow * Point()))
          {
            mem_prices.eu_price = eu_buy_price;
            mem_prices.ed_price = ed_sell_price;
            mem_prices.si_price = si_sell_price;
            exp_state = POS_LOW;
          }
        break;
        case POS_HIGH:
          if(AskBuffer[0] <= (ExitHigh * Point()))
          {
            profit += long((eu_buy_price - mem_prices.eu_price)/eu_point + (ed_sell_price - mem_prices.ed_price)/ed_point + (si_sell_price - mem_prices.si_price)/si_point) - Comis;
            exp_state = POS_NONE;
          }
        break;
        case POS_LOW:
          if(BidBuffer[0] >= (ExitLow * Point()))
          {
            profit += long((mem_prices.eu_price - eu_buy_price)/eu_point + (mem_prices.ed_price - ed_sell_price)/ed_point + (mem_prices.si_price - si_sell_price)/si_point) - Comis;
            exp_state = POS_NONE;
          }
        break;
      }
    }
    else
    {
      AskBuffer[0] = AskBuffer[1];
      BidBuffer[0] = BidBuffer[1];
    }
  }
  ObjectSetString(ChartID(),"Eu_label_1",OBJPROP_TEXT,"Position: " + EnumToString(exp_state));
  ObjectSetString(ChartID(),"Eu_label_2",OBJPROP_TEXT,"Profit: " + string(profit) + " points");
//---
  ChartRedraw();
  event_cnt = rates_total; 
  return(rates_total);
}

//+------------------------------------------------------------------+
 
prostotrader:

这里有一个有用的指标。

而现在这个TS的作用(货币是高度波动的),但

不幸的是,只有在演示中。

由于MT5有很大的延迟,这个TS(合成Eu)。

将是无利可图的,尽管从本质上讲,它是100%的盈利。

Eu(自然) = Si * ED

谁有兴趣,可以 "玩"。

想象一下,那些现在 "坐在 "2号广场上的人(没有延误)!

谢谢你!当然,要怎样才能使它发挥作用?
 
Alexsandr San:
我不知道我需要什么来使它发挥作用,谢谢你!"。

MT5的快速操作。

好了,写一个专家顾问(虽然这个指标是一个专家顾问,只是没有下订单)。

模拟模式下的真实账户上 工作。

Как заказать торгового робота на MQL5 и MQL4
Как заказать торгового робота на MQL5 и MQL4
  • www.mql5.com
Главным преимуществом торговых терминалов MetaTrader является возможность создания автоматических торговых систем, способных совершать торговые операции без вмешательства трейдера, что позволяет исключить влияние психологии на результаты торговли. Для этого нужно сформулировать торговую стратегию и реализовать ее в виде программы на языке MQL...
 
prostotrader:

MT5的快速操作。

好了,写一个专家顾问(虽然这个指标是一个专家顾问,只是没有下订单)。

模拟模式下的真实账户上 工作。

对不起!什么是符号(指标应该只在'Eu'符号上!)?

图片来源