如何编码? - 页 230 1...223224225226227228229230231232233234235236237...347 新评论 xx3xxx 2010.04.09 04:06 #2291 研究2010年的图表 使用你的模板来创建一些东西 -- 超过随机指数 的联盟 由于我们在早期使用了我们的随机图表 -- 它是否仍然适用于2010年的图表 -- 那些是真正的交易者,芽和你可以有他的任务 -- 我是进入非带状的勒贝斯格积分数学编程 -- 记得电影《She's Out of My League》 -- 好工作意味着好报酬 ----- 阅读代码 -- -- 比2010年当前的投资风格稍逊一筹 William Snyder 2010.04.09 04:11 #2292 scottyb: 我已经尝试了几乎所有可能的组合,我在编译时遇到了被诅咒的怪异小括号故障。我看了好几个小时,但都没能解决这个问题。我把它归结为一段代码的问题,是什么把脚本搞坏了。有谁能告诉我哪里出了问题(除了我是个白痴之外)。 空白的ScanForClosure()。{int cash = OrderProfit() + OrderSwap() + OrderCommission()int MacdCurrent, MacdPrevious, SignalCurrent;int SignalPrevious, MaCurrent, MaPrevious;int total2 = OrdersTotal();int numords2 = 0;bool type = false。int trd2 = 0;MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)。MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1)。SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0)。SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1)。MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0)。MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);ArrayResize(lastOrders,5)。ArrayInitialize(lastOrders,0);//for(int cnt=0; cnt<total2; cnt++){OrderSelect(cnt, SELECT_BY_POS)。如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)。{如果((OrderType()==OP_BUY)&&(MacdCurrent>0)&&(MacdCurrent<SignalCurrent)&&(现金>0)&&(MacdPrevious>SignalPrevious) && MacdCurrent>(MACDCloseLevel*Point))。{CloseOrder(1);}如果((OrderType()==OP_SELL)&&(现金>0)&& (MacdCurrent<0 ) &&(MacdCurrent>SignalCurrent)&&(MacdPrevious<SignalPrevious)&&(MathAbs(MacdCurrent))>(MACDCloseLevel*Point))。{CloseOrder(2)。}}}} 嗨,Scotty。 我是从macd 样本中复制的 如果(OrderType()==OP_BUY) { if(MacdCurrent>0 && cash>0 && MacdCurrentSignalPrevious && MacdCurrent>(MACDCloseLevel*Point)) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet)。 返回(0)。 } 否则 { if(MacdCurrent 0 &&MacdCurrent>SignalCurrent && MacdPrevious(MACDCloseLevel*Point)) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // 关闭位置 返回(0)。 } 监管 工具 William Snyder 2010.04.09 04:24 #2293 forextrend: 为什么这段代码会出现错误的参数计数错误。for(int i = 0;i < 3;i++) { kline = iStochastic(NULL,TimeFrame1, Period(), 4, 3, 3, MODE_SMA, 1, MODE_MAIN, i)。 dline = iStochastic(NULL,TimeFrame1, Period(), 4, 3, 3, MODE_SMA, 1, MODE_SIGNAL, i)。 } 应该是 int counted_bars = IndicatorCounted(); int limit,i; if(counted_bars<0) return(-1); 如果(counted_bars>0) counted_bars--。 limit = Bars - counted_bars; for(int i=limit; i>=0; i--) { kline = iStochastic(NULL,TimeFrame1, 4, 3, 3, MODE_SMA, 1, MODE_MAIN, i); dline = iStochastic(NULL,TimeFrame1, 4, 3, 3, MODE_SMA, 1, MODE_SIGNAL, i); 关注 工具 scottyb 2010.04.09 06:06 #2294 谢谢工具先生,也许我把它弄得太复杂了,但它有什么问题呢? 发布的例子会不会扫描所有开放的票据? 我认为它只会扫描两个(一个买入和一个卖出),很可能每次都是同一个:/ 我对mt4编程非常陌生,但我确信会发生这种情况。 scottyb 2010.04.09 09:18 #2295 想通了 你盯着同一个问题连续看了10个小时也没能解决,真是不可思议。 我又看了一下。 当我醒来的时候,在5分钟内就解决了。 似乎这个MT4代码非常严格。 你似乎需要精确地编码它所寻找的东西(无论你是否可以用其他10种语言做完全相同的事情,并且可以工作)。 我已经为《魔兽世界》创建了机器人,让一个角色在游戏中自己跑来跑去,定位并杀死东西,但是当我试图在MT4中创建一个简单的买入卖出程序时,我却很难做到。 总之,我得到的教训是,要限制你在一行中使用if的内容。 希望我可以为其他一些人省去我的痛苦。 OrderSelect(cnt, SELECT_BY_POS)。 如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { 如果(OrderType()==OP_BUY) 如果(利润>0) 如果(MacdCurrent<SignalCurrent) 如果(MacdCurrent>0) 如果(MacdPrevious>SignalPrevious) 如果(MacdCurrent>(MACDCloseLevel*Point)) { CloseOrder(1); } 如果(OrderType()==OP_SELL) 如果((MacdCurrent<0 ) ) 如果(利润>0 ) 如果(MacdCurrent>SignalCurrent) 如果(MacdPrevious<SignalPrevious) 如果(MathAbs(MacdCurrent)>(MACDCloseLevel*Point)) 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 新人的基本问题 你对这份演示报告有何看法?2小时内存款增加330倍 purplxd 2010.04.14 03:00 #2296 代码协助 - 分形 你好。 我在寻找一些帮助,作为我工作中的一个系统的一部分,需要做以下的代码。 有效的Long if。 (编号从最旧的到最近的1-x) --分形指向下1比分形指向下2高 --分形上升1形成并创造了破多的可能条件,然而 --分形下跌3要高于分形下跌2 -- 这就验证了趋势的变化。价格向上突破上分 形将是一个有效的TRUE。如果一个新的、较低的上分形被形成,那就是新的突破点,除非有一个比上分形下跌更低的分形。较低的分形应该创造较高的高点。 对于空头验证来说是相反的。 干杯 亚伦 purplxd 2010.04.14 03:06 #2297 可以试着解释得更清楚一点 所以价格有一个上升的趋势,形成了一个上分形。价格回调,形成一个底部分形。价格继续回调,形成了另一个较低的底部分形。 然后价格上升,形成一个新的、较低的、上部分形。 价格回调,形成另一个底部分形,但这个底部分形比之前的底部分形要高。 价格突破之前的上分形,有效的突破多头条件。 PS 如果一个新的较低的上分形形成,但是底部分形继续在创造更高的高点,那么新的突破点就是最近的上分形。 PPS 如果更低的底部分形开始形成,条件将被重置,我们将继续寻找上述条件或反转条件来验证空头的突破。 干杯 亚伦 Nopik 2010.04.14 03:48 #2298 你到底需要什么样的编程帮助?需要对整个系统进行编程吗? purplxd 2010.04.14 03:52 #2299 就那逻辑部分。 假设一个布尔,它是ValidBuy = FALSE。 如果上面的条件逻辑发生了,就把它设置为TRUE。 我确定这是一个数组,然后比较数组的值,但我对数组的编码不是很在行。 谢谢 亚伦 Nopik 2010.04.14 05:30 #2300 你不需要使用任何数组。只要创建一个函数,它可以找到给定分形的水平,所以你可以这样调用。 double fractal = FindFractal( 0, MODE_LOWER );[/CODE] first parameter being number of fractal (0-last, 1-one before last, etc.) and second parameter telling if you want upper or lower fractal. Then, you can code like this: [CODE]double last_lower_fractal = FindFractal( 0, MODE_LOWER ); double previous_lower_fractal = FindFractal( 1, MODE_LOWER ); if( last_lower_fractal > previous_lower_fractal ) { //we have found that most recent lower fractal is higher than its predecessor, do rest of your logic here. } How to code? ifractals [ARCHIVE!] Any rookie question, 1...223224225226227228229230231232233234235236237...347 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
研究2010年的图表
使用你的模板来创建一些东西 -- 超过随机指数 的联盟
由于我们在早期使用了我们的随机图表 -- 它是否仍然适用于2010年的图表 -- 那些是真正的交易者,芽和你可以有他的任务 -- 我是进入非带状的勒贝斯格积分数学编程 -- 记得电影《She's Out of My League》 -- 好工作意味着好报酬 -----
阅读代码 -- -- 比2010年当前的投资风格稍逊一筹
我已经尝试了几乎所有可能的组合,我在编译时遇到了被诅咒的怪异小括号故障。我看了好几个小时,但都没能解决这个问题。我把它归结为一段代码的问题,是什么把脚本搞坏了。有谁能告诉我哪里出了问题(除了我是个白痴之外)。
空白的ScanForClosure()。
{
int cash = OrderProfit() + OrderSwap() + OrderCommission()
int MacdCurrent, MacdPrevious, SignalCurrent;
int SignalPrevious, MaCurrent, MaPrevious;
int total2 = OrdersTotal();
int numords2 = 0;
bool type = false。
int trd2 = 0;
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)。
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1)。
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0)。
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1)。
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0)。
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
ArrayResize(lastOrders,5)。
ArrayInitialize(lastOrders,0);
//
for(int cnt=0; cnt<total2; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS)。
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)。
{
如果((OrderType()==OP_BUY)&&
(MacdCurrent>0)&&
(MacdCurrent<SignalCurrent)&&
(现金>0)&&
(MacdPrevious>SignalPrevious) && MacdCurrent>(MACDCloseLevel*Point))。
{
CloseOrder(1);
}
如果((OrderType()==OP_SELL)&&
(现金>0)&& (MacdCurrent<0 ) &&
(MacdCurrent>SignalCurrent)&&
(MacdPrevious<SignalPrevious)&&
(MathAbs(MacdCurrent))>(MACDCloseLevel*Point))。
{
CloseOrder(2)。
}
}
}
}嗨,Scotty。
我是从macd 样本中复制的
如果(OrderType()==OP_BUY)
{
if(MacdCurrent>0 && cash>0 && MacdCurrentSignalPrevious &&
MacdCurrent>(MACDCloseLevel*Point))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet)。
返回(0)。
}
否则
{
if(MacdCurrent 0 &&MacdCurrent>SignalCurrent &&
MacdPrevious(MACDCloseLevel*Point))
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // 关闭位置
返回(0)。
}
监管
工具
为什么这段代码会出现错误的参数计数错误。
for(int i = 0;i < 3;i++)
{
kline = iStochastic(NULL,TimeFrame1, Period(), 4, 3, 3, MODE_SMA, 1, MODE_MAIN, i)。
dline = iStochastic(NULL,TimeFrame1, Period(), 4, 3, 3, MODE_SMA, 1, MODE_SIGNAL, i)。
}应该是
int counted_bars = IndicatorCounted();
int limit,i;
if(counted_bars<0) return(-1);
如果(counted_bars>0) counted_bars--。
limit = Bars - counted_bars;
for(int i=limit; i>=0; i--)
{
kline = iStochastic(NULL,TimeFrame1, 4, 3, 3, MODE_SMA, 1, MODE_MAIN, i);
dline = iStochastic(NULL,TimeFrame1, 4, 3, 3, MODE_SMA, 1, MODE_SIGNAL, i);
关注
工具
谢谢工具先生,也许我把它弄得太复杂了,但它有什么问题呢? 发布的例子会不会扫描所有开放的票据? 我认为它只会扫描两个(一个买入和一个卖出),很可能每次都是同一个:/ 我对mt4编程非常陌生,但我确信会发生这种情况。
想通了
你盯着同一个问题连续看了10个小时也没能解决,真是不可思议。 我又看了一下。 当我醒来的时候,在5分钟内就解决了。 似乎这个MT4代码非常严格。 你似乎需要精确地编码它所寻找的东西(无论你是否可以用其他10种语言做完全相同的事情,并且可以工作)。
我已经为《魔兽世界》创建了机器人,让一个角色在游戏中自己跑来跑去,定位并杀死东西,但是当我试图在MT4中创建一个简单的买入卖出程序时,我却很难做到。![](https://c.mql5.com/forextsd/smiles/frown.png)
总之,我得到的教训是,要限制你在一行中使用if的内容。 希望我可以为其他一些人省去我的痛苦。
OrderSelect(cnt, SELECT_BY_POS)。
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
如果(OrderType()==OP_BUY)
如果(利润>0)
如果(MacdCurrent<SignalCurrent)
如果(MacdCurrent>0)
如果(MacdPrevious>SignalPrevious)
如果(MacdCurrent>(MACDCloseLevel*Point))
{
CloseOrder(1);
}
如果(OrderType()==OP_SELL)
如果((MacdCurrent<0 ) )
如果(利润>0 )
如果(MacdCurrent>SignalCurrent)
如果(MacdPrevious<SignalPrevious)
如果(MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
代码协助 - 分形
你好。
我在寻找一些帮助,作为我工作中的一个系统的一部分,需要做以下的代码。
有效的Long if。
(编号从最旧的到最近的1-x)
--分形指向下1比分形指向下2高
--分形上升1形成并创造了破多的可能条件,然而
--分形下跌3要高于分形下跌2
-- 这就验证了趋势的变化。价格向上突破上分 形将是一个有效的TRUE。如果一个新的、较低的上分形被形成,那就是新的突破点,除非有一个比上分形下跌更低的分形。较低的分形应该创造较高的高点。
对于空头验证来说是相反的。
干杯
亚伦
可以试着解释得更清楚一点![](https://c.mql5.com/forextsd/smiles/smile.png)
所以价格有一个上升的趋势,形成了一个上分形。价格回调,形成一个底部分形。价格继续回调,形成了另一个较低的底部分形。
然后价格上升,形成一个新的、较低的、上部分形。
价格回调,形成另一个底部分形,但这个底部分形比之前的底部分形要高。
价格突破之前的上分形,有效的突破多头条件。
PS 如果一个新的较低的上分形形成,但是底部分形继续在创造更高的高点,那么新的突破点就是最近的上分形。
PPS 如果更低的底部分形开始形成,条件将被重置,我们将继续寻找上述条件或反转条件来验证空头的突破。
干杯
亚伦
你到底需要什么样的编程帮助?需要对整个系统进行编程吗?
就那逻辑部分。
假设一个布尔,它是ValidBuy = FALSE。
如果上面的条件逻辑发生了,就把它设置为TRUE。
我确定这是一个数组,然后比较数组的值,但我对数组的编码不是很在行。
谢谢
亚伦
你不需要使用任何数组。只要创建一个函数,它可以找到给定分形的水平,所以你可以这样调用。
first parameter being number of fractal (0-last, 1-one before last, etc.) and second parameter telling if you want upper or lower fractal.
Then, you can code like this:
[CODE]double last_lower_fractal = FindFractal( 0, MODE_LOWER );
double previous_lower_fractal = FindFractal( 1, MODE_LOWER );
if( last_lower_fractal > previous_lower_fractal )
{
//we have found that most recent lower fractal is higher than its predecessor, do rest of your logic here.
}