我将免费撰写一份顾问报告 - 页 161

 

大家好!谁能写一个与当前价格绑定的2射线的指标?

一般来说:在离价格(买入价和卖出价)一定距离处放置两条水平射线--一条在下面,另一条在上面。该距离可以在指示器设置 中设置。谢谢你!

 
Radmir Serebrennikov #:

大家好!谁能写一个与当前价格绑定的2射线的指标?

一般来说:在离价格(买入价和卖出价)一定距离处放置两条水平射线--一条在下面,另一条在上面。该距离可以在指示器设置 中设置。谢谢你!

代码:动态高和低

动态高和低

图1: 动态高和低

Dynamic High and Low
Dynamic High and Low
  • www.mql5.com
Индикатор без индикаторных буферов - просто две линии на постоянном расстоянии от цены
 
Vladimir Karputov #:

代码:动态高和低


图1. 动态高和低

非常感谢!!!
 
谁能在mt5中写一个脚本,运行后给出一个有bdb bar的可用工具列表? Bdb bar,它也是反转,最低点低于前一个,收盘在前30%,反之,高于前一个,收盘在后30%。大约有3千种乐器。
 
Salud!出现了使用文件中的数据进行交易的需求。从本质上讲,一个机器人从文件中提取一对,方向,计算手数风险...我搜索了一下,没有找到类似的东西,你有类似的东西吗?
 
你好。祝你新年快乐!请帮助我在MQL5 中添加命令,在signal="buy "时关闭所有的买入头寸。 反之亦然,所有的买入头寸将在signal="sell "时被关闭。预先感谢你。
 
Namiq Acalov #:
你好。祝你新年快乐!请帮助我在MQL5 中添加命令,在signal="buy "时关闭所有的买入头寸。 反之亦然,所有的买入头寸将在signal="sell "时被关闭。预先感谢你。

使用文章几乎是一个构造函数来创建一个EA--你需要将参数'InpCloseOpposite'设置为'true'

input group             "Additional features"

*** 
input bool                 InpCloseOpposite        = true;          // Positions: Close opposite

*** 
Почти конструктор для создания советника
Почти конструктор для создания советника
  • www.mql5.com
Предлагаю свой набор торговых функций в виде готового советника. Представленный способ позволяет получать множество торговых стратегий простым добавлением индикаторов и изменением входных параметров.
 
Vladimir Karputov #:

使用文章几乎构造函数来创建一个EA--你需要将'InpCloseOpposite'参数设置为'true'。

谢谢你,弗拉基米尔。我现在正在读它
 

晚上好,亲爱的专家们。请教如何找到网格中第一个订单的手数?

我的问题是如何为infopanel指定最大的缩减值(缩减本身是计算出来的,但它是浮动的;如何从它那里得到最大的值)。

我得到了一个很好的反馈,我正在尝试MQL4的例子,我通过尝试和错误卡在了这两个位置上(

 
Namiq Acalov #:
你好。祝你新年快乐!请帮助我在MQL5 中添加命令,在signal="buy "时关闭所有的买入头寸。 反之亦然,所有的买入头寸将在signal="sell "时被关闭。预先感谢你。

该函数取自弗拉基米尔-卡尔普托夫的 代码

//+------------------------------------------------------------------+
//|                                                ClosePosition.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
#define    InpMagic  0
//---
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\AccountInfo.mqh>
//---
CTrade            m_trade;                      // trading object
CSymbolInfo       m_symbol;                     // symbol info object
CPositionInfo     m_position;                   // trade position object
CAccountInfo      m_account;                    // account info wrapper
//---
input double InpLots          =0.1; // Lots
input int    InpTakeProfit    =50;  // Take Profit (in pips)
//---
double            m_adjusted_point;             // point value adjusted for 3 or 5 points
double            m_take_profit=0.0;
//---
string m_name[]= {"Buy","Sell","CloseBuy","CloseSell"};
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- initialize common information
   m_symbol.Name(Symbol());                  // symbol
   m_trade.SetExpertMagicNumber(InpMagic); // magic
   m_trade.SetMarginMode();
   m_trade.SetTypeFillingBySymbol(Symbol());
//--- tuning for 3 or 5 digits
   int digits_adjust=1;
   if(m_symbol.Digits()==3 || m_symbol.Digits()==5)
      digits_adjust=10;
   m_adjusted_point=m_symbol.Point()*digits_adjust;
//--- set default deviation for trading in adjusted points
   m_take_profit     =InpTakeProfit*m_adjusted_point;
//--- set default deviation for trading in adjusted points
   m_trade.SetDeviationInPoints(3*digits_adjust);
//---
   int u=15;
   for(int y=0; y<ArraySize(m_name); y++)
     {
      ButtonCreate(m_name[y],5,u,170,15,8);
      u=u+17;
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   for(int y=0; y<ArraySize(m_name); y++)
     {
      ObjectDelete(0,Symbol()+m_name[y]);
     }
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!RefreshRates())
      return;
   if(ObjectGetInteger(0,Symbol()+"Buy",OBJPROP_STATE)!=0)
     {
      ObjectSetInteger(0,Symbol()+"Buy",OBJPROP_STATE,0);
      double priceAsk=m_symbol.Ask();
      double tpAsk   =m_symbol.Bid()+m_take_profit;
      //--- check for free money
      if(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_BUY,InpLots,priceAsk)<0.0)
         printf("We have no money. Free Margin = %f",m_account.FreeMargin());
      else
        {
         //--- open position
         if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,priceAsk,0.0,tpAsk))
            printf("Position by %s to be opened",Symbol());
         else
           {
            printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
            printf("Open parameters : price=%f,TP=%f",priceAsk,tpAsk);
           }
        }
     }
   if(ObjectGetInteger(0,Symbol()+"Sell",OBJPROP_STATE)!=0)
     {
      ObjectSetInteger(0,Symbol()+"Sell",OBJPROP_STATE,0);
      double priceBid=m_symbol.Bid();
      double tpBid   =m_symbol.Ask()-m_take_profit;
      //--- check for free money
      if(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_SELL,InpLots,priceBid)<0.0)
         printf("We have no money. Free Margin = %f",m_account.FreeMargin());
      else
        {
         //--- open position
         if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,InpLots,priceBid,0.0,tpBid))
            printf("Position by %s to be opened",Symbol());
         else
           {
            printf("Error opening SELL position by %s : '%s'",Symbol(),m_trade.ResultComment());
            printf("Open parameters : price=%f,TP=%f",priceBid,tpBid);
           }
        }
     }
   if(ObjectGetInteger(0,Symbol()+"CloseBuy",OBJPROP_STATE)!=0)
     {
      ObjectSetInteger(0,Symbol()+"CloseBuy",OBJPROP_STATE,0);
      ClosePositions(POSITION_TYPE_BUY);
     }
   if(ObjectGetInteger(0,Symbol()+"CloseSell",OBJPROP_STATE)!=0)
     {
      ObjectSetInteger(0,Symbol()+"CloseSell",OBJPROP_STATE,0);
      ClosePositions(POSITION_TYPE_SELL);
     }
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates(void)
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: ","RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: ","Ask == 0.0 OR Bid == 0.0");
      return(false);
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+
//| Close positions                                                  |
//+------------------------------------------------------------------+
void ClosePositions(const ENUM_POSITION_TYPE pos_type)
  {
   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positions
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==InpMagic)
            if(m_position.PositionType()==pos_type)
              {
               if(m_position.PositionType()==POSITION_TYPE_BUY)
                 {
                  if(!m_trade.PositionClose(m_position.Ticket())) // close a position by the specified m_symbol
                     Print(__FILE__," ",__FUNCTION__,", ERROR: ","BUY PositionClose ",m_position.Ticket(),", ",m_trade.ResultRetcodeDescription());
                 }
               if(m_position.PositionType()==POSITION_TYPE_SELL)
                 {
                  if(!m_trade.PositionClose(m_position.Ticket())) // close a position by the specified m_symbol
                     Print(__FILE__," ",__FUNCTION__,", ERROR: ","SELL PositionClose ",m_position.Ticket(),", ",m_trade.ResultRetcodeDescription());
                 }
              }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ButtonCreate(string name,int Xdist,int Ydist,int Xsize,int Ysize,int FONTSIZE=12)
  {
   if(ObjectFind(0,Symbol()+name)<0)
      ObjectCreate(0,Symbol()+name,OBJ_BUTTON,0,100,100);
   ObjectSetInteger(0,Symbol()+name,OBJPROP_COLOR,clrWhite);
   ObjectSetInteger(0,Symbol()+name,OBJPROP_BGCOLOR,clrDimGray);
   ObjectSetInteger(0,Symbol()+name,OBJPROP_XDISTANCE,Xdist);
   ObjectSetInteger(0,Symbol()+name,OBJPROP_YDISTANCE,Ydist);
   ObjectSetInteger(0,Symbol()+name,OBJPROP_XSIZE,Xsize);
   ObjectSetInteger(0,Symbol()+name,OBJPROP_YSIZE,Ysize);
   ObjectSetString(0,Symbol()+name,OBJPROP_FONT,"Sans Serif");
   ObjectSetString(0,Symbol()+name,OBJPROP_TEXT,name);
   ObjectSetInteger(0,Symbol()+name,OBJPROP_FONTSIZE,FONTSIZE);
   ObjectSetInteger(0,Symbol()+name,OBJPROP_SELECTABLE,false);
  }
//+------------------------------------------------------------------+