//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 31.10.2008 |//| Описание : Выполняет вставку элемента массива с заданным индексом. |//| Возвращает размер нового массива. |//+----------------------------------------------------------------------------+//| Параметры: |//| m - массив элементов типа double |//| e - значение элемента |//| i - индекс элемента (-1 - добавить в конец массива) |//+----------------------------------------------------------------------------+int ArrayInsertDouble(double& m[],double e,int i=-1){int j, k=ArraySize( m);ArrayResize( m, k+1);if( i>=0&& i< k){for( j= k; j> i; j--) m[ j]= m[ j-1];
m[ i]= e;}else m[ k]= e;return( k+1);}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 13.10.2008 |//| Описание : Возвращает тип последнего удалённого ордера или -1 |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+int GetTypeLastDeleted(string sy="",int mn=-1){datetime t;int i, k=OrdersHistoryTotal(), r=-1;if( sy=="0") sy=Symbol();for( i=0; i< k; i++){if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){if((OrderSymbol()== sy || sy=="")&&( mn<0||OrderMagicNumber()== mn)){if(OrderType()>1&&OrderType()<6&& t<OrderCloseTime()){
t=OrderCloseTime();
r=OrderType();}}}}return( r);}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 26.02.2008 |//| Описание : Возвращает расчётный номер бара от начала суток. |//| : Нумерация баров начинается с 1 (единица). |//+----------------------------------------------------------------------------+//| Параметры: |//| tf - таймфрейм (0 - текущий таймфрейм) |//| dt - дата и время открытия бара (0 - текущее время) |//+----------------------------------------------------------------------------+int iBarOfDayCalc(int tf=0,datetime dt=0){if( tf<=0) tf=Period();if( dt<=0) dt=TimeCurrent();if( tf>PERIOD_D1){Print("iBarOfDayCalc(): Таймфрейм должен быть меньше или равен D1");return(0);}double ms=MathMod( dt/60,1440);// количество минут от начала сутокint bd=MathFloor( ms/ tf)+1;// номер бара от начала сутокreturn( bd);}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 26.02.2008 |//| Описание : Возвращает реальный номер бара от начала суток. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL или "" - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| dt - дата и время открытия бара ( 0 - текущее время) |//+----------------------------------------------------------------------------+int iBarOfDayReal(string sy="",int tf=0,datetime dt=0){if( sy==""|| sy=="0") sy=Symbol();if( tf<=0) tf=Period();if( dt<=0) dt=TimeCurrent();if( tf>PERIOD_D1){Print("iBarOfDayReal(): Таймфрейм должен быть меньше или равен D1");return(0);}int cd=TimeDay( dt);// текущий день месяцаint nb=iBarShift( sy, tf, dt, False);// номер текущего бараint bd=0;// номер бара от начала сутокwhile(TimeDay(iTime( sy, tf, nb))== cd){
nb++;
bd++;}return( bd);}
ArrayInsertDouble()函数
插入一个具有给定索引的数组的一个元素。返回新数组的元素数(大小)。插入的过程如下。首先,阵列的大小增加了一个。然后,所有索引大于或等于要插入的元素被逐一移到数组的末端,为要插入的元素腾出空间。最后,该值被写入所需的单元格中。ArrayInsertDouble()函数需要以下参数。
请看所附脚本,测试ArrayInsertDouble(), ArrayInsertInt(), ArrayInsertString() 函数。
ZZZY.我更新了我网站上的b-Array 库。
Igor,既然我们在讨论数组,我们能不能回到我以前的请求,关于数组的排序("KimIV的有用函数")。之前做的事情有点不对,对不起,不确定的TOR。
我需要对一个二维数组按给定的列(行)进行排序,类似于EXCEL 中的操作。这个程序是需要使用Spearman的统计数字'Spearman's Rank Correlation Coefficient',在一些相关矩阵的变体分析中 货币(组合)。
BubbleSort2()函数。
该函数将一个二维数组的元素冒泡成一个任意的列。你还可以指定排序方向。BubbleSort2()函数接受以下参数。
GetTypeLastDeleted()函数。
该函数返回最后删除的订单的类型,或-1。可能会有这样的情况,我们需要将EA的操作逻辑与刚刚删除的订单的类型联系起来。例如,如果你刚刚删除了BuyStop,你应该这样做,但如果BuyLimit,你应该做其他事情,等等。GetTypeLastDeleted()函数接受以下可选参数。
是的,现在是这个。
#include "b-KimIV.mqh" // 附加函数库
你好,奥列格!
为了实现b-Positions. mqh 库的无错误编译,你需要已经在这个分支中的函数。
因此,你可以做以下工作。
>>祝你好运!
iBarLargest()函数。
该函数返回最大条的索引或-1。栏的大小由函数以两种方式之一测量,由输入参数ty 决定--搜索项目的类型。要么只是身体尺寸,要么和阴影一起。iBarLargest()函数接受以下可选参数。
iBarOfDayCalc()函数。
这个函数返回从一天的开始计算的条数。条形图从一开始编号,也就是说,在某一天,开盘时间最短的条形图将是第一条,下一个条形图将是第二条,等等。这个功能对于优化进入/退出时间很有用。如果有人对细节感兴趣,可以提出问题。我将尽我所能回答他们。iBarOfDayCalc() 函数接受以下可选参数。
我附上一个测试 iBarOfDayCalc() 函数的脚本。下面的插图显示了如何使用该脚本。
函数iBarOfDayReal()。
该函数返回从一天开始的实际条数。这些条形图以1为编号,即在给定的一天中开盘时间最短的条形图将有1号,下一个条形图将有2号,等等。我还没有发现这个功能的任何实际用途。但我已经写好了它:-)与函数iBarOfDayCalc() 一起。iBarOfDayReal() 函数接受以下可选参数。
我附上一个测试iBarOfDayReal() 函数的脚本。下面的插图显示了如何使用该脚本。
iBarOfDayReal()函数。
我还没有发现这个功能的实际应用。
yyyy...:)
我在这里作为一个培训工具,决定写一个计算行驶距离的脚本。
如果有人知道有一个程序可以在显示器上计算鼠标跑了多少公里。
所以在这里,把当前一天(周、月或年)的 开盘-收盘条加起来,或者如果你想象一下
另一种方式,就像用线和针缝制毛皮大衣:开-关-关-关-关-关-关......。在图形的过程中。
同样的事情,但在高低档...
困难从最初的步骤就开始了。
如何从图表中过滤出当前日期的条形图...
我会试着应用你的功能来进行这种涉猎。
伊戈尔。下午好。
也许你可以为你画一个简单的任务:任务(对我来说)是如下。
任务如下:设定信号线 在什么价格值上会与MACD交叉,或者说,MACD直方图会变成等于零。
需要解决这个问题,例如,在使用该指标的交易系统的信号中,计算下一栏的停止价格或订单限额,
。
这将直观地 显示价格水平,在这个价格水平上,MACD直方图将穿过零线(即图表上的一条线穿过价格-线)。
这指的是用MACD= (FastEMA/ SlowEMA - 1)这个公式计算的MACD百分比。 第12期,第26期,信号9。
我有Omega和Metostock的代码。 我在其他地方找不到如何在MT4中实现它。
谢谢你