问吧! - 页 88

 
 

谢谢Ralph,我试过了,但它又给出了另一个错误列表--说包含文件中的所有变量都没有被定义--但它们是被定义的。

我将在周末再试一次,目前这让我有点沮丧。

@faqcya - 我怀疑你把它放在一个脚本里是对的,但我不知道如何处理调用它,除非我有一个shell EA来把它放进去。

也许我会看一下模板,看看我是否可以从中调用它,或者更好的是把它变成一个EA,我只想让它保持原样,不做其他事情。

谢谢你的帮助。

凯文

ralph.ronnquist:
@pgtips:把第二行改成只有
#define MAGIC 20051120
,即没有等号和逗号。
 

试图学习编程

首先,我读了Corder's Guru的整个课程,发现它非常有趣。我得出的结论是,尝试一种策略的唯一合理方式是通过编写程序来确保其完全准确。不幸的是,谈到这个问题,我完全是个菜鸟。

我一直在尝试写一个基本的程序,但甚至不能让它发挥作用。至少我没有再出现任何错误,但它不接受任何订单。我很执着,会继续尝试,但希望看到我的错误的人能够提供一些帮助。

在这一点上,我所要做的是跟踪最低价格(CurrentLow),然后当它回调到一定数量(Ret1)时,下一个卖单,TP为低点。

请不要笑,但以下是我到目前为止所写的内容。

//---- 输入参数

extern double TP1=75.0;

extern double Ret1=75.0;

extern double SL1=150.0;

extern double Lots=0.1;

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

//|专家初始化函数 |

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

int init()

{

//----

//----

return(0);

}

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

//|专家的去初始化功能|

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

int deinit()

{

//----

//----

return(0);

}

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

//|专家启动功能|

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

int start()

{

int ticket=0。

如果(Bars<100)

{

Print("条数小于100")。

return(0);

}

双倍CurrentLow,CurrentHigh。

如果(Bid < CurrentLow)

{

CurrentLow = Bid;

如果(Bid > CurrentHigh)

{

CurrentHigh = Bid;

如果(CurrentHigh >= CurrentLow+(Point*Ret1))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point), "Albatross_v1",7575,0,Green);

返回(0)。

}

返回(0)。

}

return(0);

}

}

 
Putz:
首先,我阅读了Corder's Guru的整个课程,发现它非常有趣。我得出的结论是,尝试一个策略的唯一合理方式是编写一个程序,以确保其完全准确。不幸的是,在这方面我完全是个新手。

我一直在尝试写一个基本程序,但甚至不能让它工作。至少我没有再出现任何错误,但它不接受任何订单。我很执着,会继续尝试,但希望看到我的错误的人能够提供一些帮助。

在这一点上,我所要做的是跟踪最低价格(CurrentLow),然后当它回调到一定数量(Ret1)时,下一个卖单,TP为低点。

请不要笑,但以下是我到目前为止所写的内容。

//---- 输入参数

extern double TP1=75.0;

extern double Ret1=75.0;

extern double SL1=150.0;

extern double Lots=0.1;

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

//|专家初始化函数 |

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

int init()

{

//----

//----

return(0);

}

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

//|专家的去初始化功能|

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

int deinit()

{

//----

//----

return(0);

}

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

//|专家启动功能|

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

int start()

{

int ticket=0。

如果(Bars<100)

{

Print("条数小于100")。

return(0);

}

双倍CurrentLow,CurrentHigh。

如果(Bid < CurrentLow)

{

CurrentLow = Bid;

如果(Bid > CurrentHigh)

{

CurrentHigh = Bid;

如果(CurrentHigh >= CurrentLow+(Point*Ret1))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point), "Albatross_v1",7575,0,Green)。

返回(0)。

}

返回(0)。

}

return(0);

}

}

在Bid<CurrentLow的真实条件下检查Bid>CurrentHigh似乎是错误的;我认为你应该有这样的独立测试。

double CurrentLow,CurrentHigh;

int start()

{

if(Bid < CurrentLow) CurrentLow = Bid;

if(Bid > CurrentHigh) CurrentHigh = Bid;

if(Bid >= CurrentLow+(Point*Ret1))

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point),"Albatross_v1",757575,0,Green);

return(0);

}

现在,有三点意见。

- 你必须在全局范围内声明CurrentHigh和CurrentLow,即在任何函数 之外(start()是一个函数),否则这些变量将在函数的每次调用中被初始化为0。

- 你不需要CurrentHigh,因为它不被使用。

- 你必须实现一些逻辑来重置/更新CurrentLow的值,并可能限制在CurrentLow+(Point*Ret1)以上的每个tick的开仓。)

 

嗨,米歇尔。

非常感谢你的及时回复和帮助。

我已经删除了CurrentHigh,现在明白了很多。我还在程序的顶部定义了CurrentLow,现在它确实下了订单。

我还添加了基于更大回撤的第二个订单,这似乎是有效的。现在我必须弄清楚如何阻止它在每一个刻度 上创建一个新的订单,但现在我将自己解决这个问题,因为我将以这种方式更好地学习它。

我肯定会带着更多问题回到这里。

再次感谢。

普茨

 
Putz:
嗨,米歇尔。

非常感谢你的及时回复和帮助。

我已经删除了CurrentHigh,现在明白了很多。我还在程序的顶部定义了CurrentLow,现在它确实下了订单。

我还添加了基于更大回撤的第二笔订单,这似乎是有效的。现在我必须弄清楚如何阻止它在每一个刻度上创建一个新的订单,但现在我将自己解决这个问题,因为我将以这种方式更好地学习它。

我肯定会带着更多问题回到这里。

再次感谢。

普茨

不要忘了用一个大的值来初始化CurrentLow(如1000);如果它的初始化值为0,你将永远不会出现Bid < 0的情况。

 

我应该学习哪种编程语言?

codersguru:
嗨,朋友们。

我收到很多私人信息,要求我帮助处理一些代码。

在这里,您可以发布与MQL4有关的问题,我将尽力回答。

亲爱的编码大师。

如果我想学习编写MQL4代码,我应该学习哪种编程语言?Visual basic还是C++?谢谢您的回答。

 

请提供更多帮助

你好。

我回来寻求更多帮助。我一直在阅读和查看许多其他的EA,试图弄清楚它,但我仍然无法让它正常工作。

我想做的是下两个订单。

1)一旦价格回调到Ret1(75点),卖出0.1手,TP1(75)和SL1(150)。

2) 一旦价格回撤到Ret2(150点),卖出0.2手,TP1(75)和SL1(75)。

从长期来看,我想根据趋势的方向,得到一个像上面那样的买入订单。我还没有确定我将使用哪个指标来确定趋势,但我将在某个时候到达那里。

以下是我目前的情况。它似乎能正确下第一笔订单,但第二笔订单从未被触发。如果有任何帮助,我将非常感激。

exern string Expert_Name = "Albatross v1";

外部int MagicNumber = 757575;

extern int Slippage = 3.0;

//---- 输入参数

extern double TP1=75.0;

外置双倍TP2=75.0。

外置双倍Ret1=75.0。

外置双倍Ret2=150.0。

外置双倍数SL1=150.0。

外置双倍SL2=75.0。

外置双倍数Lots=0.1。

double CurrentLow=1000;

//double CurrentHigh=0;

int OpenOrders=0,cnt=0;

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

//|自定义指标 初始化函数

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

//int init()

// {

//---- 指标

//----

// return(0);

// }

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

//|自定义指标去初始化功能|

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

// int deinit()

// {

//---- TODO:在这里添加你的代码

//----

// return(0)。

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

//| 自定义指标迭代函数|

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

// int start()

// {

//---- TODO:在这里添加你的代码

//----

// return(0)。

// }

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

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

//|专家初始化函数 |

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

int init()

{

//----

//----

return(0);

}

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

//|专家的去初始化功能|

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

int deinit()

{

//----

//----

return(0);

}

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

//| 检查打开位置控制

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

int CheckOpenTrades()

{

int cnt;

int NumTrades; // 这个符号的买入和卖出交易的数量

NumTrades = 0。

for(cnt=OrdersTotal()-1;cnt>=0;cnt--)

{

OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);

if ( OrderSymbol() != Symbol() ) 继续。

if ( OrderMagicNumber() != MagicNumber) 继续。

如果(OrderType() == OP_BUY ) NumTrades++;

如果(OrderType() == OP_SELL ) NumTrades++;

}

返回(NumTrades)。

}

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

//|专家启动功能|

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

int start()

{

int cnt, ticket, total;

双重TP。

如果(Bars<100)

{

Print("小于100的条数")。

return(0);

}

total = CheckOpenTrades();

if(total < 1)

{

如果(Bid < CurrentLow) CurrentLow = Bid;

如果(Bid >= CurrentLow+(Point*Ret1))

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point), "Albatross_v1",MagicNumber,0,Green) 。

}

if(total < 2)

{

if(Bid >= CurrentLow+(Point*Ret2))

OrderSend(Symbol(),OP_SELL,Lots*2,Bid+(Point*Ret2),3,Bid+(SL2*Point),Bid-(TP2*Point), "Albatross_v1",MagicNumber,0,Green)。

返回(0)。

}

}

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

 

很抱歉用这个问题来打扰你

你如何创建一个充满颜色的对象?

戴夫

<<<

 

大家好,我是一个程序员,已经用C++语言编写了很长时间的代码,但我对FX和MQL4的了解是非常基本的。我正在阅读某人写的EA,并试图理解代码......

你能不能用简单的英语解释一下,什么是iMA方法中的SHIFT参数?

double iMA(string symbol,int timeframe,int period,int ma_shift,int ma_method,int applied_price, int shift)

根据MT4的帮助,它是 "从指标缓冲区 获取的数值的索引(相对于当前条形图,在给定的时间段之前移动)"。- 什么是指标缓冲区?

他还在做以下工作......

int RealTime = 0;

if( UseCompletedBars )

{

if(timeprev==Time[0]){return(0);} timeprev = Time[0];

RealTime = 1;

}

double MA11 = iMA(NULL,0,MA1Periods,0,MA1MethodSelected, MA1ArraySelected,0+RealTime);

double MA12 = iMA(NULL,0,MA1Periods,0,MA1MethodSelected, MA1ArraySelected,1+RealTime);

double MA21 = iMA(NULL,0,MA2Periods,0,MA2MethodSelected, MA2ArraySelected,0+RealTime);

double MA22 = iMA(NULL,0,MA2Periods,0,MA2MethodSelected, MA2ArraySelected,1+RealTime);

if( MA11 > MA21 && MA12 < MA22 ) { EnterLong = True; }

if( MA11 MA22 ) { EnterShort = True; }

因为我不知道移位,我想这就是为什么我不能得到它......

你的答案将得到高度评价。

请帮助。