KimIV的有用功能 - 页 91 1...848586878889909192939495969798...128 新评论 TheXpert 2009.08.13 12:25 #901 CrossPointOfSections()函数。 这个函数计算两个线段的交点坐标。 每个线段由一对点坐标定义。三个数组作为参数被传递给函数。 x- 尾数阵列。必须包含四个 元素:x[0],x[1]- 第一段的分水岭,x[2],x[3]- 第二段的分水岭。 y- 一个数组的坐标。应该包含四个 元素:y[0],y[1]- 第一段的坐标,y[0],y[1]- 第二段的坐标。 t- 你要找的交叉点的坐标阵列。在函数正常执行后,这个数组将包含两个 元素:t[0] 是两条线的交叉点的标线,t[1] 是同一点的序数。 如果两段相交,结果为真,如果不相交,结果为假。如果片段完全或部分全等,该函数将返回错误。 //+----------------------------------------------------------------------------+ //| Параметры: | //| x - массив абсцисс x[0], x[1] - первый отрезок | //| x[2], x[3] - второй отрезок | //| y - массив ординат y[0], y[1] - первый отрезок | //| y[0], y[1] - второй отрезок | //| t - массив искомых координат t[0] - абсцисса точки пересечения | //| t[1] - ордината точки пересечения | //| результат true если отрезки пересекаются | //| false если нет | //| примечание если отрезки не пересекаются, то в мас- | //| сив t[] передается точка пересечения | //| прямых, на которых лежат отрезки | //+----------------------------------------------------------------------------+ bool CrossPointOfSections(double& x[], double& y[], double& t[]) { double z=( y[3]- y[2])*( x[1]- x[0])-( y[1]- y[0])*( x[3]- x[2]); ArrayResize( t, 2); ArrayInitialize( t, 0.0); if ( z==0) { Print("CrossPointOfSections(): Не удалось найти точку пересечения!"); return (false); } double xy1= x[1]* y[0]- x[0]* y[1]; double xy2= x[3]* y[2]- x[2]* y[3]; t[0]=NormalizeDouble(( xy1*( x[3]- x[2])- xy2*( x[1]- x[0]))/ z, 0); t[1]=( xy1*( y[3]- y[2])- xy2*( y[1]- y[0]))/ z; if (( t[0] - x[0])*( t[0] - x[1]) > 0 || ( t[1] - y[0])*( t[1] - y[1]) > 0) return (false); if (( t[0] - x[2])*( t[0] - x[3]) > 0 || ( t[1] - y[2])*( t[1] - y[3]) > 0) return (false); return (true); } 这个脚本是用来测试的。 附加的文件: sectionscross_1.mq4 7 kb 只有 KimIV 的有用功能 。 趋势有多长? 数据科学与机器学习(第 02 部分):逻辑回归 DDFedor 2009.08.13 12:51 #902 谢谢你。 Rid 2009.08.14 07:26 #903 下午好。关于返回标志的函数的问题,即在采取或停止损失时关闭最后的头寸。 '来自KimIV的有用功能'。 函数isCloseLastPosByTake()。该函数返回关闭最后一个位置的标志。Flag is up - True - TakeProfit has triggered.标记降低 - 错 - 职位因其他原因被关闭 //--------------------------------------------------------------- 昨天我在普通论坛上问了这个问题。但到目前为止还没有答案。 我的专家顾问有一个3步法的马汀格。每个步骤(位置)都有自己的魔力(1,2,3)。 仓位通过信号和/或止损来关闭。 这种类型的关闭也被实施。 if ( isCloseLastPosByStop(NULL, OP_BUY, Magic_3)) //если посл. позиция //закрылась по тейкпрофиту, - то закрываем все позиции ClosePosFirstProfit(NULL,OP_BUY, -1); 事实证明,我的专家顾问工作得很好,直到边际的最后一个(最大的头寸)在获利时被关闭!我的专家顾问工作得很好。 然后,当下一个第一个位置(神奇的1)被打开时,它被立即关闭,因为isCloseLastPosByTake() 函数标志保持设置为一(1) ! 就这样到了无穷大。打开和关闭。 此外!终端会记住这个标志,即使重新删除/安装EA也没有帮助(直到你改变magiks)。 我需要一些方法,在所有头寸关闭后重置isCloseLastPosByTake() 函数。 我已经把我的大脑扭曲了。它不会起作用! Igor !, 或者谁(可以),请告诉我如何做,如果你能做到这一点? Rid 2009.08.14 07:42 #904 我的问题的答案似乎已经找到了。如果你有兴趣,就在这里。 '给鉴赏家的问题'。 Рита 2009.08.22 06:19 #905 KimIV >> : 如何使用ModifyOrder()函数的例子。 我决定举出以前被问过很多次的最开始的例子。这是在市场订单执行方面的开仓行为 市场观察。它是指我们不能同时下达按市场价格开仓的指令,并将一个挂单附在上面。在Market Watch上的这种开仓应该分两个阶段进行:首先,我们开一个头寸,然后给它附加一个挂单,即我们设置StopLoss和TakeProfit价格水平。 1.买入当前符号的0.1手并设定30点的止损。 2.卖出当前符号的0.15手,设置SL=45,TP=99 int ti= OpenPosition(NULL, OP_SELL, 0.15); if (OrderSelect( ti, SELECT_BY_TICKET)) ModifyOrder(-1, Bid+45*Point, Bid-99*Point, clModifySell); 预告片中包括一个带有实例的工作脚本。 祝伊戈尔和所有的人早上好!我已经在我的EA中应用了这些功能。一切都修改的很好。只要我没有在我的EA里放一个魔力! 所有位置都正常修改。然而-- 我不明白为什么OpenPosition()函数没有看到这个魔术师,而是一直在每个柱子上一个一个地开仓。 我已经删除了所有不必要的东西(我以为是我在代码中的错误)。 并在评论中写上职位的数量。 它是无用的。当有明显的位置时--评论打印为零。 我不明白为什么功能不能看到魔术师!下面是代码。 extern int Magic = 7771; extern int StopLoss =200; extern int TakeProfit_Sell =200; extern double Lots_1 = 0.01;//размер лота //--------------------------------------------------------------------+ extern string _P_Performance = "- Параметры открытия позиций "; extern bool UseSound = True; //Использовать звуковой сигнал extern string NameFileSound = "expert.wav";//Наименование зву. файла откр. color clOpenBuy = Blue; // Цвет значка открытия покупки color clOpenSell = Red; // Цвет значка открытия продажи color clModifyBuy = Aqua; // Цвет значка модификации покупки color clModifySell = Tomato; // Цвет значка модификации продажи int Slippage = 10; // Проскальзывание цены int NumberOfTry = 10; // Количество попыток //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж //-- Подключаемые модули -- #include <stderror.mqh> #include <stdlib.mqh> //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж bool gbDisabled = False; // Флаг блокировки советника double SL, TP; int ti; static int prevtime = 0; //------------------------------------------------------------ int start() { Comment ("Количество откр. позиций = ", NumberOfPositions(NULL,OP_SELL, Magic)); if(Time[0] == prevtime) return(0);//ждём появления нового бара prevtime = Time[0];//если появился новый бар , включаемся //XXXXXXXXXXXXXXXXXXX ОТКРЫТИЕ ПОЗИЦИЙ ХХХХХХХХХХХХХХ if( NumberOfPositions(NULL,OP_SELL, Magic)<1){//если нет открытых селл- // позиций SL=0; TP=0;// задаем стопы if( StopLoss>0) SL=Bid+Point* StopLoss; if( TakeProfit_Sell>0) TP=Bid-Point* TakeProfit_Sell; //Открываем позицию селл ti= OpenPosition(NULL, OP_SELL, Lots_1, Magic); if (OrderSelect( ti, SELECT_BY_TICKET)) ModifyOrder(-1, SL, TP, clModifySell); } return (0); //-----------------Конец функции int start()------------------------- } // Пользовательские функции жжжжжжжжжжжжжжжжжжжжжжжжж //Здесь только названия. Полный код ф-й - ниже в аттаче void Message(string m) //вывод сообщ в коммент и принт int NumberOfPositions(string sy="", int op=-1, int mn=-1)//кол-во позиций string GetNameOP(int op)//торг. операция int OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) void ModifyOrder(double pp=-1, double sl=0, double tp=0, color cl=CLR_NONE) string GetNameTF(int TimeFrame=0) //таймфрейм bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0)//флаг сущ. 附上该代码的源文件。你能告诉我,我在哪里犯了错误,为什么EA看不到magik? 附加的文件: exp.sell.rar 4 kb [删除] 2009.08.22 14:47 #906 if( StopLoss>0) SL=Bid+Point* StopLoss; if( TakeProfit_Sell>0) TP=Bid-Point* TakeProfit_Sell; //Открываем позицию селл //ti=OpenPosition(NULL, OP_SELL, Lots_1,Magic); Ваш маджик шел в качестве стоп-лосса ti= OpenPosition(NULL, OP_SELL, Lots_1, SL, TP, Magic); Alexander 2009.08.23 05:14 #907 你是否知道在你的版本中,它只检查卖出的订单? 我发现,你只向开仓函数发送了四个参数,而你需要六个。 Рита 2009.08.23 05:52 #908 是的,谢谢大家(tmp.0&Roger)!修复了它,一切都在正常工作。 我的注意力不集中是有原因的。根本就不是 OpenPosition()函数。 SL=0; TP=0; if( StopLoss>0) SL=Bid+Point* StopLoss; if( TakeProfit>0) TP=Bid-Point* TakeProfit; ti= OpenPosition(NULL, OP_SELL, Lots,0,0, Magic); if (OrderSelect( ti, SELECT_BY_TICKET)) ModifyOrder(-1, SL, TP, clModifySell); [删除] 2009.08.25 07:01 #909 球员,给你一个提示! 当使用OrderCloseBuy - OrderCloseSell时,内置的MKueL语言和编译器需要两个函数参数(订单票--买和卖)。我们有一张未结订单的票,但我们如何设置第二张票?或者是我没有理解到什么--语言自学中没有写到这个功能,也没有例子。 提前感谢您! [删除] 2009.08.25 08:02 #910 这里还有一个问题要问伊戈尔。 你是否创建了一个单独的自定义(或其他)函数来翻转买入-卖出头寸,反之亦然,而不使用通常的OrderClose-OrderSend? 1...848586878889909192939495969798...128 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
CrossPointOfSections()函数。
这个函数计算两个线段的交点坐标。 每个线段由一对点坐标定义。三个数组作为参数被传递给函数。
这个脚本是用来测试的。
下午好。关于返回标志的函数的问题,即在采取或停止损失时关闭最后的头寸。
'来自KimIV的有用功能'。
函数isCloseLastPosByTake()。
该函数返回关闭最后一个位置的标志。Flag is up - True - TakeProfit has triggered.标记降低 - 错 - 职位因其他原因被关闭
//---------------------------------------------------------------
昨天我在普通论坛上问了这个问题。但到目前为止还没有答案。
我的专家顾问有一个3步法的马汀格。每个步骤(位置)都有自己的魔力(1,2,3)。
仓位通过信号和/或止损来关闭。
这种类型的关闭也被实施。
事实证明,我的专家顾问工作得很好,直到边际的最后一个(最大的头寸)在获利时被关闭!我的专家顾问工作得很好。
然后,当下一个第一个位置(神奇的1)被打开时,它被立即关闭,因为isCloseLastPosByTake() 函数标志保持设置为一(1) !
就这样到了无穷大。打开和关闭。
此外!终端会记住这个标志,即使重新删除/安装EA也没有帮助(直到你改变magiks)。
我需要一些方法,在所有头寸关闭后重置isCloseLastPosByTake() 函数。
我已经把我的大脑扭曲了。它不会起作用!
Igor !, 或者谁(可以),请告诉我如何做,如果你能做到这一点?
我的问题的答案似乎已经找到了。如果你有兴趣,就在这里。
'给鉴赏家的问题'。
如何使用ModifyOrder()函数的例子。
我决定举出以前被问过很多次的最开始的例子。这是在市场订单执行方面的开仓行为 市场观察。它是指我们不能同时下达按市场价格开仓的指令,并将一个挂单附在上面。在Market Watch上的这种开仓应该分两个阶段进行:首先,我们开一个头寸,然后给它附加一个挂单,即我们设置StopLoss和TakeProfit价格水平。
1.买入当前符号的0.1手并设定30点的止损。
2.卖出当前符号的0.15手,设置SL=45,TP=99
预告片中包括一个带有实例的工作脚本。
只要我没有在我的EA里放一个魔力!
所有位置都正常修改。然而--
我不明白为什么OpenPosition()函数没有看到这个魔术师,而是一直在每个柱子上一个一个地开仓。 我已经删除了所有不必要的东西(我以为是我在代码中的错误)。
并在评论中写上职位的数量。 它是无用的。当有明显的位置时--评论打印为零。
我不明白为什么功能不能看到魔术师!下面是代码。
附上该代码的源文件。你能告诉我,我在哪里犯了错误,为什么EA看不到magik?
是的,谢谢大家(tmp.0&Roger)!修复了它,一切都在正常工作。
我的注意力不集中是有原因的。根本就不是 OpenPosition()函数。
球员,给你一个提示!
当使用OrderCloseBuy - OrderCloseSell时,内置的MKueL语言和编译器需要两个函数参数(订单票--买和卖)。我们有一张未结订单的票,但我们如何设置第二张票?或者是我没有理解到什么--语言自学中没有写到这个功能,也没有例子。
提前感谢您!
这里还有一个问题要问伊戈尔。
你是否创建了一个单独的自定义(或其他)函数来翻转买入-卖出头寸,反之亦然,而不使用通常的OrderClose-OrderSend?