编码帮助 - 页 281

 
mladen:
stevenpun 你说买入有0.1手+0.2手,卖出应该是0.4手。你能澄清一下吗?

你好,mladen,很抱歉这么晚才回复。

因为我已经病了好几天了。

我做了一个图片

例如,当买入有2个开放的订单(0.1手+0.2手),但突然火车已经改变为卖出。

EA将打开一个0.1手的卖盘,但我希望它打开0.4手。

有可能修改吗?

附加的文件:
lot_explain.jpg  121 kb
 
hermes:
再次问好。

我试着用上面的注释,但它只显示Max。你能帮助我实现两个功能吗?一个是显示出价以上的即时行价,另一个是显示出价以下的行价。谢谢你。

以下是代码。

//+------------------------------------------------------------------+

//| SimpleGrid.mq4+

//+------------------------------------------------------------------+

#include

#include

#property strict

//导出的变量

extern string GridStartingPrice = " Start Price to Place Lines ";

外置双倍GSP = 0.0;

extern int GR = 5;

外置双倍GridStep = 5;

External color CGL = Gold;

External color BGL = Green;

Extern color SGL = Red;

外部 bool ClearAllObjects = False;

// 本地变量

double PipValue=1; // 这个变量是用来支持5位数的经纪人的。

bool Terminated = false;

string LF = "\n"; // 在需要换行的自定义或实用程序块中使用这个变量。

int NDigits = 4; // 主要用于Flex类型块中的NormalizeDouble。

int ObjCount = 0; // 计算图表上创建的所有对象,允许创建具有唯一名称的对象

int current = 0;

int init()

{

NDigits = Digits;

if (false) ObjectsDeleteAll(); // 清除图表

Comment(""); // 清除图表

return(0);

}

// 专家开始

int start()

{

如果(Bars < 10)

{

Comment("没有足够的条数")。

返回(0)。

}

如果(Terminated == true)

{

Comment("EA终止了。")。

返回(0)。

}

OnEveryTick7();

返回(0)。

}

空白的OnEveryTick7()

{

PipValue = 1。

如果(NDigits == 3 || NDigits == 5)PipValue = 10;

CentreGridLine();

}

空白CentreGridLine()

{ 如果(ObjectFind("CGL") == (-1) )

{

{

string objName = "CGL" ;

ObjectCreate(objName, OBJ_HLINE, 0, Time[0],GSP)。

ObjectSet(objName, OBJPROP_PRICE1, GSP)。

ObjectSet(objName, OBJPROP_COLOR,CGL);

}

TradeLine()。

UprBnd();

LwrBnd();

}

}

无效TradeLine()

{

int i;

双重GridStep1= (GridStep*2);

double BGSP= (GSP+((GridStep/2)*PipValue*Point)) ;

双SGSP= (GSP-((GridStep/2)*PipValue*Point))。

双倍 BBGSP= (BGSP-((GridStep*(GR))*PipValue*Point)) ;

双SSGSP= (SGSP+((GridStep*(GR))*PipValue*Point))。

{

for(i=0; i<GR;i++)

{

SGL("出售 "+i,BBGSP+GridStep1*i*PipValue*Point)。

}

}

{

for(i=0; i<GR;i++)

{

BGL("购买 "+i,SSGSP-GridStep1*i*PipValue*Point)。

}

}

}

void BGL(string objName, double price)

{

ObjectCreate(objName, OBJ_HLINE, 0, 0, price);

ObjectSet(objName, OBJPROP_STYLE, STYLE_SOLID)。

ObjectSet(objName, OBJPROP_WIDTH, 1);

ObjectSet(objName, OBJPROP_COLOR, BGL);

}

void SGL(string objName, double price)

{

ObjectCreate(objName, OBJ_HLINE, 0, 0, price);

ObjectSet(objName, OBJPROP_STYLE, STYLE_SOLID)。

ObjectSet(objName, OBJPROP_WIDTH, 1);

ObjectSet(objName, OBJPROP_COLOR, SGL);

}

无效的UprBnd()

{ 如果(ObjectFind("UPRBND") == (-1) )

{

double BGSP= (GSP+((GridStep/2)*PipValue*Point)) 。

双倍价格= (BGSP+((GridStep*(GR))*PipValue*Point)) 。

string objName = "UPRBND" ;

ObjectCreate(objName, OBJ_HLINE, 0, Time[0], price )。

ObjectSet(objName, OBJPROP_PRICE1,price);

ObjectSet(objName, OBJPROP_COLOR, DodgerBlue);

ObjectSet(objName, OBJPROP_WIDTH,3);

}

}

空白的LwrBnd()

{ 如果(ObjectFind("LWRBND") == (-1) )

{

double SGSP= (GSP-((GridStep/2)*PipValue*Point))。

双倍价格= (SGSP-((GridStep*(GR))*PipValue*Point))。

string objName = "LWRBND" ;

ObjectCreate(objName, OBJ_HLINE, 0, Time[0], price )。

ObjectSet(objName, OBJPROP_PRICE1,price);

ObjectSet(objName, OBJPROP_COLOR, Tomato);

ObjectSet(objName, OBJPROP_WIDTH, 3);

}

}

int deinit()

{

如果(ClearAllObjects)ObjectsDeleteAll()。

返回(0)。

}

//+------------------------------------------------------------------+

赫米斯

你能附上mq4文件吗?

 
mladen:
Hermes 你能附上mq4文件吗?

在这里,它是。谢谢

附加的文件:
simpleg.mq4  4 kb
 

我需要帮助。

我需要帮助,我做了一个Ea,它与2个移动平均线 和2个不同的时间框架有关,以过滤趋势,我想添加一个RSI指标,以过滤交易,设置例如RSI周期8的水平50,如果高于RSI水平50的交叉,我们只打开卖出市场订单,如果低于RSI水平50的交叉,我们只打开购买市场订单。我附上Ea,起初与keltnerchannels相连,但现在我想只作为Ma1和Ma2使用。

有谁能帮助我完成这一改变?

谢谢你。

附加的文件:
 
hermes:
在这里,它是。谢谢

赫尔墨斯

试试这个 :simpleg_1.mq4

附加的文件:
simpleg_1.mq4  6 kb
 
daniel1983:
你好。

我需要帮助,我做了一个Ea,它与2个移动平均线和2个不同的时间框架有关,以过滤趋势,我想添加一个RSI指标,以过滤交易,设置例如RSI周期8的水平50,如果高于RSI水平50的交叉,我们只打开卖出市场订单,如果低于RSI水平50的交叉,我们只打开购买市场订单。我附上Ea,起初与keltnerchannels相连,但现在我想只作为Ma1和Ma2使用。

有人能帮助我完成这一改变吗?

谢谢你

daniel1983

几乎可以肯定的是,你永远不会同时得到mas和rsis的交叉点(意思是--你几乎不会得到信号)。试试吧:做一个简单的指标,做你所描述的那样,你会发现这些情况很少同时发生。

 
mladen:
daniel1983 几乎可以肯定的是,你永远不会在同一时间得到mas和RSI的交叉点(意味着--你几乎永远不会得到信号)。试试吧:做一个简单的指标,做你所描述的那样,你会发现这些情况很少同时发生。

嗨,Mladen,

我的意思是

- 在0和50之间的任何水平上只能卖出

- 在50和100之间的任何水平只能买入。

不是在这个相同的交叉点,交叉点可以在任何水平(43,41,18,25)买入市场订单,确认更高的时间框架趋势。我已经测试过了,大约80%的订单看起来是用这个过滤器不会向相反的方向打开。

现在,Ea在交叉点开始下降趋势时打开买入订单,用这个过滤器在80%的情况下会过滤这个交叉点,而不在这个点上输入订单,这些Ma交叉点。

在这个Ea中,我输入了高时间框架,但我做了测试,使用低时间框架来过滤趋势,效果更好。

我附上一个测试例子的图片。

对于欧元兑美元

在这种情况下,我使用EMA2和EMA67,RSI(8)时间框架1分钟和Hitimeframe 5分钟,在这种情况下,你有一个无利可图的买入市场订单,这个买入市场订单发生在EMa的交叉点,但RSI在50以下的水平。

然后你有一个卖出市场订单,在交叉点开盘,但RSI低于50,这个订单是正确的市场订单,我想从所有信号中过滤。

有可能做到这一点吗?

谢谢你。

丹尼尔

附加的文件:
rsi_filter.png  32 kb
 
mladen:
爱马仕 试试这个 :simpleg_1.mq4

你好,Mladen。

用这个终于可以工作了。谢谢你

空白的LoopBS()

{

double max =(ObjectGet("UPRBND",OBJPROP_PRICE1))。

double min =(ObjectGet("LWRBND",OBJPROP_PRICE1))。

for (int i =ObjectsTotal()-1; i>=0; i--)

{

string name = ObjectName(i);

如果(StringSubstr(name,0,3)=="购买")

{

double BS=ObjectGet(name,OBJPROP_PRICE1);

如果((Ask<BS) && (BSmin))

{

max = ObjectGet(name,OBJPROP_PRICE1);

{

评论(DoubleToStr(BS,Digits)," ")。

}

}

}

}

}

 

不准确的信号

不准确的信号

亲爱的,工匠们!你能不能发出更好的信号来做。M1,M5,M15

附加的文件:
.......png  31 kb
 
DMNIK:
不准确的信号 亲爱的,工匠们!你能不能发出更好的信号。M1, M5, M15

它只是显示过去3个收盘价是大于还是小于过去3个开盘价。这方面没有什么需要改进的地方