[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 132 1...125126127128129130131132133134135136137138139...432 新评论 Viktar Dzemikhau 2013.02.03 10:19 #1311 Roman.:IMHO,不复杂,但非常容易 "指导 "或发送。 那么,"发送 "即 "发送 "当然比建议更容易。而事实上,我并没有问什么,以便在课本上戳穿我。在一个地方写了一个重复的东西,没错,但本质并没有改变。artmedia70:最后,告诉我你到底想做什么...例如:MAK某某正在上涨,并且高于MAK某某,而价格在某个点位低于/高于MAK某某,如果是真的,那么在某个距离下挂单。我将给你一个粗略的算法。因为当你的代码片段被撕掉时,很难引导你走向正确的方向。毕竟这个任务是给五年级的学生的(夸张地)。这里我附上一个测试版本的代码,并在我的帖子中也公布了它。//+-----------------------------------------------------------------------------------+ //| test_Ma.mq4 | //| hoz | //| | //+-----------------------------------------------------------------------------------+ #property copyright "hoz" #property link "" extern string ___H0 = " ___________ Параметры МА ____________ "; extern int i_TF = 0, i_fastMaPeriod = 10, i_slowMaPeriod = 21; extern string ___H1 = " _____ Параметры ордера _______"; extern int i_magic = 3333021; extern double i_thresholdFromMa = 5; // Отступ от МА // Машечки double fastMa, slowMa; double pt; // Переменные рыночного окружения double g_spread, g_stopLevel, g_tickSize; // Идентификаторы положений машек #define MA_DIRECT_TO_UP 0 // Машки направлены вверх #define MA_DIRECT_TO_DOWN 1 // Машки направлены вниз #define MA_DIRECT_TO_NONE -1 // Машки во флете #define SIGNAL_BUY 0 // Сигнал на покупку #define SIGNAL_SELL 1 // Сигнал на продажу #define SIGNAL_NO -1 // Сигнала нет //+-------------------------------------------------------------------------------------+ //| Функция иницилизации | //+-------------------------------------------------------------------------------------+ int init() { GetMarketInfo(); if (Digits == 2 || Digits == 4) pt = Point; if (Digits == 1 || Digits == 3 || Digits == 5) pt = Point * 10; if (Digits == 6) pt = Point * 100; if (Digits == 7) pt = Point * 1000; return (0); } //+-------------------------------------------------------------------------------------+ //| Функция деиницилизации | //+-------------------------------------------------------------------------------------+ int deinit() { //---- //---- return (0); } //+-------------------------------------------------------------------------------------+ //| Сбор рыночных данных | //+-------------------------------------------------------------------------------------+ void GetMarketInfo() { g_spread = MarketInfo(Symbol(),MODE_SPREAD); g_stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL); g_tickSize = MarketInfo(Symbol(),MODE_TICKSIZE); } //+-------------------------------------------------------------------------------------+ //| Функция нормализации | //+-------------------------------------------------------------------------------------+ double ND(double A) { return (NormalizeDouble(A, Digits)); } //+-------------------------------------------------------------------------------------+ //| Открытие длинной позиции | //+-------------------------------------------------------------------------------------+ bool OpenBuy(double fastMa, double slowMa) { int ticket = -1; if ((fastMa + i_thresholdFromMa * pt) > Ask) // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0); if (ticket > 0) return (true); } //+-------------------------------------------------------------------------------------+ //| Открытие короткой позиции | //+-------------------------------------------------------------------------------------+ bool OpenSell(double fastMa, double slowMa) { int ticket = -1; if ((fastMa - i_thresholdFromMa * pt) < Bid) // Проверка что цена открытия ниже Bid, т.к. у нас вход отложенником ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(fastMa - i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0); if (ticket > 0) return (true); } //+-------------------------------------------------------------------------------------+ //| Получаем относительное положение машек | //+-------------------------------------------------------------------------------------+ int GetStateMa(double fastMa, double slowMa) { if (fastMa > slowMa) // Если условия выполнены, то.. return (MA_DIRECT_TO_UP); // ..машки направлены вниз if (fastMa < slowMa) // Если условия выполнены, то.. return (MA_DIRECT_TO_DOWN); // машки направлены вверх return (MA_DIRECT_TO_NONE); // Машки не имеют выраженного направления } //+-------------------------------------------------------------------------------------+ //| Открытие позиций | //+-------------------------------------------------------------------------------------+ bool Trade(int signal) { if (signal == SIGNAL_BUY) // Если сигнал на покупку.. if (!OpenBuy(fastMa, slowMa)) // ..покупаем return(false); if (signal == SIGNAL_SELL) // Если сигнал на продажу.. if (!OpenSell(fastMa, slowMa)) // ..продаём return(false); return (true); } //+-------------------------------------------------------------------------------------+ //| Получаем общий сигнал на открытие позиции | //+-------------------------------------------------------------------------------------+ int GetSignal() { if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_UP) // Если машки указывают вверх.. if ( MathAbs(Ask - fastMa) <= i_thresholdFromMa * pt ) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa.. return(SIGNAL_BUY); // ..функция возвращает сигнал покупки if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_DOWN) // Если машки указывают вниз.. if ( MathAbs(Bid - fastMa) <= i_thresholdFromMa * pt ) // ..зазор между ценой продажи и машки, <= i_thresholdFromMa.. return(SIGNAL_SELL); // ..функция возвращает сигнал продажи return (SIGNAL_NO); } //+-------------------------------------------------------------------------------------+ //| Функция start | //+-------------------------------------------------------------------------------------+ int start() { fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,1); slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,1); // Отслеживание открытия нового бара static datetime lastBarTime = 0; // Время проведения последних рассчётов if (lastBarTime == iTime(NULL, 0, 0)) // На текущем баре все необходимые действия.. return (0); // ..уже были выполнены // Рассчёт сигнала int signal = GetSignal(); // Проведение торговых операций if (signal != SIGNAL_NO) if (!Trade(signal)) return (0); lastBarTime = iTime(NULL, 0, 0); // На текущем баре все необходимые действия.. // .. успешно выполнены return (0); }条件明确说,订单的价格高于(低于)MA+(-)偏离MA。在这里,它是。if ( MathAbs(Ask - fastMa) <= i_thresholdFromMa * pt )只有当价格处于MA+(-)缩进的"缺口 "区域 时,才应该计算信号。例如,在一个购买功能中。ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);购买必须高于fastMa 的i_thresholdFromMa * pt。事实上,它是不存在的。要么是语言上的错误,要么是挥舞中的错误。我还能怎么解释我的需求呢?我已经给出了整个代码,没有额外的条件和功能(只有一个裸露的信号和开口)。它已经写得很清楚了(对于一个测试者来说,我没有检查它的真实性!)。下面是它的打开方式。artmedia70:关于强调:在开盘价上下功夫,那么在零点栏上就不会有MAs重绘。 我特别在第1条上做了一个条件,所以没有混淆。最主要的是如何运行它... 附加的文件: test_ma.mq4 8 kb oper11 2013.02.03 17:08 #1312 例如,每小时的第四个五分钟的开始标志必须在指标中定义。if( Minute()==15)什么都不缺。把它推向正确的方向。 Ilya Novakovski 2013.02.03 17:19 #1313 我有一个问题--如果我在制定交易标准时使用向右移动的移动平均线--即移动值为正。那么在形成信号时,我不应该使用零点或第一个柱子上的移动平均线的值,而是使用与移位值相对应的指数的柱子。 Alekseu Fedotov 2013.02.03 18:12 #1314 Operr: 例如,每小时的第四个五分钟的开始标志必须在指标中定义。 if( Minute()==15)// так будет работать в течении 1 минуты (от 15 до 16) if( Minute()>=15)// так от 15 минут и до конца текущего часа Viktar Dzemikhau 2013.02.03 20:58 #1315 Tincup:我有一个问题--如果我在制定交易标准时使用向右移动的移动平均线--即移动值为正。那么在形成信号时,我不应该使用零点或第一个柱子上的移动平均线的值,而是使用与移位值相对应的指数的柱子。 把移动平均线放在图表上,看看你需要什么指数。你可以直观地看到它。 Artyom Trishkin 2013.02.04 09:04 #1316 hoz:嗯,毫无疑问,"发送 "即 "发送 "比建议更容易。事实上,我没有要求任何东西来戳我的课本。我在一个地方写了一个重复的内容,但本质并没有改变。这里我附上了测试代码的变体,我也把它发布在我的帖子里。条件明确说,订单的价格高于(低于)MA+(-)偏离MA。在这里,它是。只有当价格处于MA+(-)缩进的"缺口 "区域 时,才应该计算信号。例如,在一个购买功能中。购买必须高于fastMa 的i_thresholdFromMa * pt。事实上,它并不存在。要么是我的语言有问题,要么是我的鼠标有问题。我还能怎么解释我的需求呢?我给出了一个没有附加条件和功能的完整代码(只有一个裸露的信号和开盘)。它已经写得很清楚了(对于一个测试者来说,我没有检查它的真实性!)。下面是它的打开方式。 我特别在第1条上做了一个条件,所以没有混淆。最主要的是如何运行它... 我再次问:你到底什么时候要下订单?不是 你的代码答案(不想了解它--有足够的自己的代码进行分析),而只是文字。 例如:我想在一个MA上面/下面放置一个挂单,距离为...巴,巴,巴,巴,巴,巴,巴...。第二次,请解释一下,有这么难吗?我们早就解决了你的问题。 Artyom Trishkin 2013.02.04 10:23 #1317 还有:如果你把fastMA和slowMA定义为全局,为什么要把它们传给一个函数?反正所有的函数都可以看到它们,不需要把它们的参数传给被调用的函数。 [删除] 2013.02.04 10:38 #1318 下午好。能否请您谈谈如何处理EA中的GAP?我经常在周末收到GEP,它们发生后,与订单的工作就会挂起,如何解决这个问题,非常感谢! Boris 2013.02.04 10:58 #1319 Artyom,你认为什么会更快,用MathMax 表达还是用if?double dist = MathMax(MathMax(NormalizeDouble(Dist*Point,Digits),spread),MathMax(StopLevel,FreezeLevel));//это? // или это? double dist = NormalizeDouble(Dist*Point,Digits); if(dist < spread) dist = spread; if(dist < StopLevel) dist = StopLevel; if(dist < FreezeLevel) dist = FreezeLevel; 我没有用语言解释,因为很明显,这种表达方式为我避免错误提供了服务130,而且它为我提供了完美的服务 提前感谢! Ilya Novakovski 2013.02.04 11:20 #1320 hoz: 把平均数放在图表上,看看你需要什么指数。你可以直观地看到它。我说过,我不太明白你的回答,所以我再问你一次。我对你的理解是否正确,在制定交易条件时 你应该使用相应条数的MA值,而不是图片中标有黄色箭头的值,向后退。我按照我对你的答案的理解画了这个图。 1...125126127128129130131132133134135136137138139...432 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
IMHO,不复杂,但非常容易 "指导 "或发送。
那么,"发送 "即 "发送 "当然比建议更容易。而事实上,我并没有问什么,以便在课本上戳穿我。在一个地方写了一个重复的东西,没错,但本质并没有改变。
最后,告诉我你到底想做什么...例如:MAK某某正在上涨,并且高于MAK某某,而价格在某个点位低于/高于MAK某某,如果是真的,那么在某个距离下挂单。我将给你一个粗略的算法。因为当你的代码片段被撕掉时,很难引导你走向正确的方向。毕竟这个任务是给五年级的学生的(夸张地)。
这里我附上一个测试版本的代码,并在我的帖子中也公布了它。
条件明确说,订单的价格高于(低于)MA+(-)偏离MA。
在这里,它是。
只有当价格处于MA+(-)缩进的"缺口 "区域 时,才应该计算信号。
例如,在一个购买功能中。
购买必须高于fastMa 的i_thresholdFromMa * pt。
事实上,它是不存在的。要么是语言上的错误,要么是挥舞中的错误。我还能怎么解释我的需求呢?我已经给出了整个代码,没有额外的条件和功能(只有一个裸露的信号和开口)。它已经写得很清楚了(对于一个测试者来说,我没有检查它的真实性!)。
下面是它的打开方式。
关于强调:在开盘价上下功夫,那么在零点栏上就不会有MAs重绘。
我有一个问题--如果我在制定交易标准时使用向右移动的移动平均线--即移动值为正。
那么在形成信号时,我不应该使用零点或第一个柱子上的移动平均线的值,而是使用与移位值相对应的指数的柱子。
例如,每小时的第四个五分钟的开始标志必须在指标中定义。
我有一个问题--如果我在制定交易标准时使用向右移动的移动平均线--即移动值为正。
那么在形成信号时,我不应该使用零点或第一个柱子上的移动平均线的值,而是使用与移位值相对应的指数的柱子。
把移动平均线放在图表上,看看你需要什么指数。你可以直观地看到它。
嗯,毫无疑问,"发送 "即 "发送 "比建议更容易。事实上,我没有要求任何东西来戳我的课本。我在一个地方写了一个重复的内容,但本质并没有改变。
这里我附上了测试代码的变体,我也把它发布在我的帖子里。
条件明确说,订单的价格高于(低于)MA+(-)偏离MA。
在这里,它是。
只有当价格处于MA+(-)缩进的"缺口 "区域 时,才应该计算信号。
例如,在一个购买功能中。
购买必须高于fastMa 的i_thresholdFromMa * pt。
事实上,它并不存在。要么是我的语言有问题,要么是我的鼠标有问题。我还能怎么解释我的需求呢?我给出了一个没有附加条件和功能的完整代码(只有一个裸露的信号和开盘)。它已经写得很清楚了(对于一个测试者来说,我没有检查它的真实性!)。
下面是它的打开方式。
我特别在第1条上做了一个条件,所以没有混淆。最主要的是如何运行它...
例如:我想在一个MA上面/下面放置一个挂单,距离为...巴,巴,巴,巴,巴,巴,巴...。
第二次,请解释一下,有这么难吗?我们早就解决了你的问题。
下午好。
能否请您谈谈如何处理EA中的GAP?
我经常在周末收到GEP,它们发生后,与订单的工作就会挂起,如何解决这个问题,非常感谢!
Artyom,你认为什么会更快,用MathMax 表达还是用if?
我没有用语言解释,因为很明显,这种表达方式为我避免错误提供了服务130,而且它为我提供了完美的服务
提前感谢!
把平均数放在图表上,看看你需要什么指数。你可以直观地看到它。
我说过,我不太明白你的回答,所以我再问你一次。我对你的理解是否正确,在制定交易条件时
你应该使用相应条数的MA值,而不是图片中标有黄色箭头的值,向后退。
我按照我对你的答案的理解画了这个图。