OrderSend()函数中的一个错误? - 页 9 12345678910 新评论 Viktar Dzemikhau 2013.02.08 18:00 #81 borilunad: 因此,没有必要设定棉签与棉条的准确比例。你只能考虑用棉签,最好把它们作为过滤器而不是信号。鲍里斯,你的观点部分正确。基本上,边框是一个指针。不过,这里同样有几个选择。有些人希望进入反趋势,有些人希望跟随趋势。有很多变化,但它们还没有真正发挥作用 :( Boris 2013.02.08 20:26 #82 hoz:鲍里斯,你说的部分正确。基本上,马车是一个指针。不过,这里同样有很多选择。有些人希望进入反趋势,有些人则进入趋势。有很多变化,但还没有达到预期效果 :( 不要为别人而悲伤!寻找你自己的,你就会找到它!如果你不知道该怎么做,你就不能做,因为价格跟不上。你必须进入市场,其趋势,至少有较少的风险。而最主要的是跟踪该位置到可能的利润和最佳关闭。:) Viktar Dzemikhau 2013.02.08 22:27 #83 重点不是悲伤,也不是对他人。 底线是,有一个错误,而支持是完全没有反应的!难道他们真的不关心客户吗。 我对它非常好奇。该请求已被搁置了近一个星期,而且没有任何反应......我不知道该怎么做......也许你可以拍一段视频,显示当前条形图上的价格,皮重物直接切过它,但没有挂单?是的,我对这一时刻有依恋,但只是为了了解原因。我将在周一把它放在Demo上测试,但是......但话说回来......如果测试器完全是小毛病,那又有什么用呢? Алексей Тарабанов 2013.02.08 23:07 #84 hoz:...也许有一个视频,并显示价格是如何走的,在当前的酒吧,焦油切过的机器... 我在马赫卡的时候就没有这种情况。 Viktar Dzemikhau 2013.02.10 12:50 #85 tara: 我和马什卡没有这种关系。 哪个马什卡?我特别写了在哪些情况下。为什么你想把它变成关于你的事?这个主题已经有9页了,但它仍然在那里。我把代码附在后面。下面是同样的代码,供查看。//+-----------------------------------------------------------------------------------+ //| 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; // Отступ от МА extern double buyHear = 10, // Расстояние от МА до отложки на бай SellHear = 10; // Расстояние от МА до отложки на шорт // Машечки double fastMa, slowMa; double pt; datetime lastBarTime; // Время проведения последних рассчётов // Переменные рыночного окружения 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(); lastBarTime = 0; 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) * pt; g_stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL) * pt; g_tickSize = MarketInfo(Symbol(),MODE_TICKSIZE) * pt; } //+-------------------------------------------------------------------------------------+ //| Функция нормализации | //+-------------------------------------------------------------------------------------+ double ND(double A) { return (NormalizeDouble(A, Digits)); } //+-------------------------------------------------------------------------------------+ //| Открытие длинной позиции | //+-------------------------------------------------------------------------------------+ bool OpenBuy() { int ticket = -1; double OOP = fastMa + buyHear * pt; // Получаем значение цны открытия if ((ND(OOP) - Ask) >= MathMax(g_stopLevel,g_spread)) // Проверка цену открытия на стоплевел { if (ND(OOP) > Ask) // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником { Print("Bid = ", Bid); Print("Ask = ", Ask); Print("fastMa = ", fastMa); Print("Цена покупки = ", fastMa + buyHear * pt); Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt); ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0); } } if (ticket > 0) { return (true); } else Alert (GetLastError()); } //+-------------------------------------------------------------------------------------+ //| Открытие короткой позиции | //+-------------------------------------------------------------------------------------+ bool OpenSell() { int ticket = -1; double OOP = fastMa - SellHear * pt; // Получаем значение цны открытия if ((Bid - ND(OOP)) >= MathMax(g_stopLevel,g_spread)) // Проверка цену открытия на стоплевел { if (ND(OOP) < Bid) // Проверка что цена открытия ниже Bid, т.к. у нас вход отложенником { Print("Bid = ", Bid); Print("Ask = ", Ask); Print("fastMa = ", fastMa); Print("fastMa + i_thresholdFromMa * pt = ", fastMa + i_thresholdFromMa * pt); Print("Цена покупки = ", fastMa + buyHear * pt); Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt); ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0); } } if (ticket > 0) { return (true); } else Alert (GetLastError()); } //+-------------------------------------------------------------------------------------+ //| Получаем относительное положение машек | //+-------------------------------------------------------------------------------------+ 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()) // ..покупаем return(false); if (signal == SIGNAL_SELL) // Если сигнал на продажу.. if (!OpenSell()) // ..продаём return(false); return (true); } //+-------------------------------------------------------------------------------------+ //| Получаем общий сигнал на открытие позиции | //+-------------------------------------------------------------------------------------+ int GetSignal() { // if (FindOrders() > 0) // Если есть открытые ордера, то.. // return (SIGNAL_NO); //..ничего не делаем if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_UP) if ( ND(MathAbs(fastMa - Ask)) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa.. return(SIGNAL_BUY); if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_DOWN) if ( ND(MathAbs(fastMa - Bid)) <= 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_OPEN,0); slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_OPEN,0); /* Print("Bid = ", Bid); Print("Ask = ", Ask); Print("fastMa = ", fastMa); Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt); */ // Отслеживание открытия нового бара 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); }一些酒吧无缘无故地被公然忽视。 当然,他们身上也没有未决的订单。代码是正确的。在我看来,没有什么可修复的。以下是显示尚未开仓的头寸的截图。测试日期在那里也可以看到。请帮助我找到原因。我已经讨论了这个主题中的所有内容,但没有讨论最初的问题。 附加的文件: test_ma_4.mq4 10 kb Viktar Dzemikhau 2013.02.10 16:29 #86 pako: 如果你不介意再次制定ToR,为什么要控制一个新酒吧? 我把它归纳为一句话!还有一件事我没有想到,但我会给你整个要点。对订单的数量 根本不应该有任何限制。也就是说,订单可以以任何数量开立.........我们有多少个并不重要,但我们只需要在当前栏中打开1个订单。就是这样。也就是说,一个新的交易栏打开了,所以我们可以在这个交易栏中打开1个订单,但在当前交易栏中不能超过1个订单。下一个订单只能在下一个柱子上打开,而不是更早。现在清楚了吗?而在这里,你错了...//+-------------------------------------------------------------------------------------+ //| Функция start | //+-------------------------------------------------------------------------------------+ int start() { fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_OPEN,0); <---------------- fastMa == slowMa slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_OPEN,0); <-------------- fastMa == slowMa 波动周期是不同的......i_fastMaPeriod和i_slowMaPeriod分别是10和21! Alexander 2013.02.10 16:54 #87 推荐阅读https://www.mql5.com/ru/articles/1411 [删除] 2013.02.10 17:15 #88 hoz: 我是这样做的,而且很容易!我还没有想到1件事,但我将给你整个想法。对订单的数量根本不应该有任何限制。也就是说,订单可以以任何数量开立...有多少个并不重要,但在当前栏中应该只开1个订单。就是这样。也就是说,一个新的交易栏打开了,所以我们可以在这个交易栏中打开1个订单,但在当前交易栏中不能超过1个订单。下一个订单只能在下一个柱子上打开,而不是更早。现在清楚了吗? 保持每条杠上只有一个仓位被打开。//+------------------------------------------------------------------+ //| черновик.mq4 | //| Copyright 2012, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if(NewBar()==true) { int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-250*Point,Ask+250*Point," ",16384,0,Green); } //---- return(0); } //+------------------------------------------------------------------+ bool NewBar() { static datetime LastTime = 0; if (iTime(NULL,0,0) != LastTime) { LastTime = iTime(NULL,0,0); return (true); } else return (false); } Alexander 2013.02.10 18:21 #89 pako: 在每根柱子上只保持一个位置开放 你不能这样做。如果你在第一次打勾时没有得到一个条件,那么整整一个小时就会被浪费掉。 Aleksey Lebedev 2013.02.10 18:43 #90 hoz: 我将使它变得清晰和简单!我还没有想到另外1件事,但我将给你整个想法。对订单的数量根本不应该有任何限制。也就是说,订单可以以任何数量开立...有多少个并不重要,但在当前栏中应该只开1个订单。就是这样。也就是说,一个新的交易栏打开了,所以我们可以在这个交易栏中打开1个订单,但在当前交易栏中不能超过1个订单。下一个订单只能在下一个条形图上打开,而不是之前。 因此,在这种情况下 lastBarTime = iTime(NULL, 0, 0); // На текущем баре все необходимые действия.. 我们只有在当前栏位被打开的情况下才能打开订单,即我们应该在函数OpenBuy/Sell中移动这一行 12345678910 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
因此,没有必要设定棉签与棉条的准确比例。你只能考虑用棉签,最好把它们作为过滤器而不是信号。
鲍里斯,你的观点部分正确。基本上,边框是一个指针。不过,这里同样有几个选择。有些人希望进入反趋势,有些人希望跟随趋势。有很多变化,但它们还没有真正发挥作用 :(
鲍里斯,你说的部分正确。基本上,马车是一个指针。不过,这里同样有很多选择。有些人希望进入反趋势,有些人则进入趋势。有很多变化,但还没有达到预期效果 :(
重点不是悲伤,也不是对他人。 底线是,有一个错误,而支持是完全没有反应的!难道他们真的不关心客户吗。 我对它非常好奇。该请求已被搁置了近一个星期,而且没有任何反应......我不知道该怎么做......也许你可以拍一段视频,显示当前条形图上的价格,皮重物直接切过它,但没有挂单?是的,我对这一时刻有依恋,但只是为了了解原因。我将在周一把它放在Demo上测试,但是......但话说回来......如果测试器完全是小毛病,那又有什么用呢?
...也许有一个视频,并显示价格是如何走的,在当前的酒吧,焦油切过的机器...
我和马什卡没有这种关系。
哪个马什卡?
我特别写了在哪些情况下。为什么你想把它变成关于你的事?这个主题已经有9页了,但它仍然在那里。
我把代码附在后面。下面是同样的代码,供查看。
一些酒吧无缘无故地被公然忽视。 当然,他们身上也没有未决的订单。代码是正确的。在我看来,没有什么可修复的。
以下是显示尚未开仓的头寸的截图。测试日期在那里也可以看到。请帮助我找到原因。我已经讨论了这个主题中的所有内容,但没有讨论最初的问题。
如果你不介意再次制定ToR,为什么要控制一个新酒吧?
我把它归纳为一句话!还有一件事我没有想到,但我会给你整个要点。
对订单的数量 根本不应该有任何限制。也就是说,订单可以以任何数量开立.........我们有多少个并不重要,但我们只需要在当前栏中打开1个订单。就是这样。
也就是说,一个新的交易栏打开了,所以我们可以在这个交易栏中打开1个订单,但在当前交易栏中不能超过1个订单。下一个订单只能在下一个柱子上打开,而不是更早。
现在清楚了吗?
而在这里,你错了...
波动周期是不同的......i_fastMaPeriod和i_slowMaPeriod分别是10和21!
推荐阅读
https://www.mql5.com/ru/articles/1411
我是这样做的,而且很容易!我还没有想到1件事,但我将给你整个想法。
对订单的数量根本不应该有任何限制。也就是说,订单可以以任何数量开立...有多少个并不重要,但在当前栏中应该只开1个订单。就是这样。
也就是说,一个新的交易栏打开了,所以我们可以在这个交易栏中打开1个订单,但在当前交易栏中不能超过1个订单。下一个订单只能在下一个柱子上打开,而不是更早。
现在清楚了吗?
保持每条杠上只有一个仓位被打开。
在每根柱子上只保持一个位置开放
我将使它变得清晰和简单!我还没有想到另外1件事,但我将给你整个想法。
对订单的数量根本不应该有任何限制。也就是说,订单可以以任何数量开立...有多少个并不重要,但在当前栏中应该只开1个订单。就是这样。
也就是说,一个新的交易栏打开了,所以我们可以在这个交易栏中打开1个订单,但在当前交易栏中不能超过1个订单。下一个订单只能在下一个条形图上打开,而不是之前。
我们只有在当前栏位被打开的情况下才能打开订单,即我们应该在函数OpenBuy/Sell中移动这一行