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

 
amsgif80 #:

这是我试图插入的代码。

在代码的顶部抛出这个:
enum ENUM_DIRECTION{
DIRECTION_BUY = 0, // 只买
DIRECTION_SELL = 1, // 只卖
DIRECTION_ANY = 2, // 买和卖
};

input ENUM_DIRECTION inp_direction = DIRECTION_ANY; // 允许交易方向


进一步查找代码中哪里开买、哪里卖在start()或OnTick()函数中查看
其中买入是在条件中添加:
if(inp_direction!=DIRECTION_SELL)
其中卖出是在条件中添加:
if(inp_direction!=DIRECTION_BUY)

你把它放在哪里了?
 
MakarFX #:
你把它放在哪里了?
//+------------------------------------------------------------------+
//| 移动平均线.mq5 | |
//| Copyright 2009-2013, MetaQuotes Software Corp.
//+------------------------------------------------------------------+





#property copyright "Copyright 2009-2013, MetaQuotes Software Corp.
#财产版本 "1.00"

enum ENUM_DIRECTION{
DIRECTION_BUY = 0, // 只买不卖
DIRECTION_SELL = 1, // 只卖出。
DIRECTION_ANY = 2, // 买和卖
};

输入ENUM_DIRECTION inp_direction = DIRECTION_ANY; // 允许的交易方向

#include <Trade\Trade.mqh>。

Input double MaximumRisk = 0.02; // Maximum Risk in percentage
输入 double DecreaseFactor = 3; // Descrease factor
输入 int MovingPeriod = 12; // 移动平均周期
输入 int MovingShift = 6; // Moving Average shift



//---
int ExtHandle=0。


//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+




int OnInit(void)
{
//---
ExtHandle=iMA(_Symbol,_Period,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE)。
如果(ExtHandle==INVALID_HANDLE)
{
printf("创建MA指标错误")。
return(INIT_FAILED)。
}
//---
return(INIT_SUCCEEDED)。
}
//+------------------------------------------------------------------+
//|专家勾选功能|
//+------------------------------------------------------------------+
空白的OnTick(void)。
{
//---
如果(PositionSelect(_Symbol))
CheckForClose()。
否则
CheckForOpen()。
//---
}
//+------------------------------------------------------------------+
//|专家去初始化功能|
//+------------------------------------------------------------------+
空白的OnDeinit(const int reason)。
{
}
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//|计算最佳手数|
//+------------------------------------------------------------------+
double TradeSizeOptimized(void)
{
双倍价格=0.0。
double margin=0.0。
//------计算地段大小
if(!SymbolInfoDouble(_Symbol,SYMBOL_ASK,price))
return(0.0);
if(!OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1.0,price,margin))
return(0.0);
如果(margin<=0.0)
return(0.0);

double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*MaximumRisk/margin,2)。
//---计算一系列不间断的亏损交易的长度
如果(DecreaseFactor>0)
{
//-----------------要求整个交易历史
HistorySelect(0,TimeCurrent())。
//--
int orders=HistoryDealsTotal(); //总的交易数量
int losses=0; //系列中亏损交易的数量

for(int i=orders-1;i>=0;i--)
{
ulong ticket=HistoryDealGetTicket(i);
如果(ticket==0)
{
Print("HistoryDealGetTicket failed, no trade history");
突破。
}
//------检查交易符号
如果(HistoryDealGetString(ticket,Deal_SYMBOL)!=_Symbol)
继续。
//---- 检查利润
double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT)。
如果(利润>0.0)
突破。
如果(利润<0.0)
损失++。
}
//---
如果(损失>1)
lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1)。
}
//---正常化并检查交易量的允许值
double stepvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP)。
lot=stepvol*NormalizeDouble(lot/stepvol,0)。

double minvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN)。
如果(lot<minvol)
lot=minvol;

double maxvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX)。
如果(lot>maxvol)
lot=maxvol;
//------返回交易量的值
return(lot)。
}


//+------------------------------------------------------------------+
//| 检查开放位置条件
//+------------------------------------------------------------------+
空白的CheckForOpen(void)。
{
MqlRates rt[2];
//---复制价格值
如果(CopyRates(_Symbol,_Period,0,2,rt)!=2)
{
Print("CopyRates of " ,_Symbol," failed, no history")。
返回。
}
如果(rt[1].tick_volume>1)
返回。
double ma[1];
如果(CopyBuffer(ExtHandle,0,0,1,ma)!=1)
{
Print("CopyBuffer from iMA failed, no data");
返回。
}
//----信号检查
ENUM_ORDER_TYPE信号=WRONG_VALUE。

如果(rt[0].open>ma[0] && rt[0].close<ma[0])
signal=ORDER_TYPE_SELL; // 卖出条件 if(inp_direction!=DIRECTION_BUY)
否则
{
如果(rt[0].open<ma[0] && rt[0].close>ma[0])
signal=ORDER_TYPE_BUY; // 买入条件 if(inp_direction!=DIRECTION_SELL)
}
//--- 额外的检查
如果(signal!=WRONG_VALUE)
如果(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
如果(Bars(_Symbol,_Period)>100)
{
CTrade贸易。
trade.PositionOpen(_Symbol,signal,TradeSizeOptimized(),
SymbolInfoDouble(_Symbol,signal==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK,)
0,0);
}
//---
}
//+------------------------------------------------------------------+
//| 检查关闭位置的条件|
//+------------------------------------------------------------------+
空白的CheckForClose(void)。
{
MqlRates rt[2];
//---复制价格值
如果(CopyRates(_Symbol,_Period,0,2,rt)!=2)
{
Print("CopyRates of " ,_Symbol," failed, no history")。
返回。
}
如果(rt[1].tick_volume>1)
返回。
double ma[1];
如果(CopyBuffer(ExtHandle,0,0,1,ma)!=1)
{
Print("CopyBuffer from iMA failed, no data");
返回。
}
//------得到位置的类型,之前通过PositionSelect()选择的。
bool signal=false。
long type=PositionGetInteger(POSITION_TYPE)。

如果(type==(long)POSITION_TYPE_BUY && rt[0].open>ma[0] && rt[0].close<ma[0])
signal=true。
如果(type==(long)POSITION_TYPE_SELL && rt[0].open<ma[0] && rt[0].close>ma[0])
signal=true。
//--- 额外的检查
如果(信号)
如果(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
如果(Bars(_Symbol,_Period)>100)
{
CTrade贸易。
trade.PositionClose(_Symbol,3);
}
//---
}
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 

这一部分应该是这样的

 //--- проверка сигналов
   ENUM_ORDER_TYPE signal=WRONG_VALUE;

   if(rt[0].open>ma[0] && rt[0].close<ma[0])
     {
      if(inp_direction!=DIRECTION_BUY)
         signal=ORDER_TYPE_SELL;
     }
   else
     {
      if(rt[0].open<ma[0] && rt[0].close>ma[0])
        {
         if(inp_direction!=DIRECTION_SELL)
            signal=ORDER_TYPE_BUY;
        }
     }
 //--- дополнительные проверки 
 
MakarFX #:

这一部分应该是这样的。

马卡,这个人。

      if(inp_direction==DIRECTION_SELL||inp_direction==DIRECTION_ANY)

最好用这个来代替。

      if(inp_direction!=DIRECTION_BUY)
 
Alexey Viktorov #:

马卡,这个人

最好用这个来代替。

取代)。
 
MakarFX #:

这一部分应该是这样的

我从心底里感谢你!这一切一下子就起作用了,它在起作用。而且我已经绞尽脑汁研究如何做到这一点))。

 
我可以再问你同样的问题吗,但是关于我自己的简单编辑器生成的专家顾问?我想,现在我将设法自己做,但我不知道把这个买/卖代码放在哪里。我不知道在哪里粘贴这个买/卖代码。
 
amsgif80 #:
我可以再问你同样的问题吗,但是关于我自己的简单编辑器生成的EA?我想,现在我将设法自己做,但我不知道把这个买/卖代码放在哪里。我不知道在哪里粘贴这个买入/卖出代码。
给我看
 
amsgif80 #:

我已经向你展示了如何在论坛中插入该代码


 
MakarFX #:

你没有改变任何东西。

你的呼吁

是在里面。

Makar 谢谢你的提示

原因: