double MassTrendNumber(double &array[], string tip) // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
{
ArrayResize(array,ObjectsTotal(OBJ_TREND));
for (int i = 0, limit = ArrayResize(array,ObjectsTotal(OBJ_TREND)); i < limit; i++)
{
string DWnem=ObjectName(i);
string DW="downtrendline"+IntegerToString(i); // существует два названия трендовых линий, первое
string DW2="uptrendline"+IntegerToString(i); // второе
if(tip="Sell") //первый массив цен на селл
if(DWnem=DW)//если имя равно "downtrendline"if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
// Также существует три цвета
array[i]=ObjectGetValueByShift(DWnem,1); //записываем
if(tip="Buy") //второй массивцен на бай
if(DWnem=DW2)
if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
array[i]=ObjectGetValueByShift(DWnem,1);
} return;
}
#property strict/******************************************************************************/bool AddValue(double &array[], constdouble value) {
constint size = ArraySize(array);
if (ArrayResize(array, size + 1) != size + 1) {
returnfalse; // Ошибка, значение не может быть добавлено к массиву
}
array[size] = value; //записываемreturntrue; // Нет ошибки, значение добавлено к массиву
}
/******************************************************************************/bool AddValueIfFound(double &array[], conststring name) {
constint type = ObjectType(name);
if (type == OBJ_TREND) {
switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switchcase Goldenrod:
case Gainsboro:
case White:
if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
returnfalse; // Ошибка, значение найдено, но не может быть добавлено к массиву
}
}
}
returntrue; // Нет ошибки, значение, если найдено, добавлено к массиву
}
/******************************************************************************/bool MassTrendNumber(double &array[], constbool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masBconststring subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второеif (ArrayResize(array, 0) != 0) {
returnfalse; // Ошибка, массив не может быть заполнен достоверно
}
for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
if (!AddValueIfFound(array, subname + IntegerToString(i))) {
returnfalse; // Ошибка, массив, если и заполнен, то недостоверно
}
}
returntrue; // Нет ошибки, массив заполнен достоверно
}
/******************************************************************************/void FillAndPrint(double &array[], constbool buy) {
if (MassTrendNumber(array, buy)) {
constint limit = ArraySize(array);
Print("Найдено объектов: ", limit);
for (int i = 0; i < limit; i++) {
Print("Price[", i, "] = ", DoubleToStr(array[i], Digits));
}
} else {
Print("Чёрт!");
}
}
/******************************************************************************/voidOnStart() {
double masS[];
double masB[];
Print("Sell:");
FillAndPrint(masS, false);
Print("Buy:");
FillAndPrint(masB, true);
}
我的问题是给一个新手的。
我最近发现MetaEditor在终端打不开,而且 "改变 "命令在EA和指标中不起作用.............,请帮助我解决这个问题。请帮助我找到它。
我的问题是给一个新手的。
我最近发现MetaEditor在终端打不开,而且 "改变 "命令在Expert Advisors和指标中不起作用.............,请帮助我解决这个问题。谢谢你。
我试着回答这个问题。
没有可能再纠正旧的代码。
至少你有一个王子可以加冕。
你什么都知道!今天我抓不住是谁把我的管理员,我也没有得到密码,我也没有想到要问!我明天就去买!你在做什么了?
感谢塔拉的参与!我让街区的邻居把所有东西都还原给我了!计算机科学专家!
是的,我明白,有很多愚蠢的问题。说实话,我已经尝试了一整天,但没有结果。
我正在把当前条形上的几条趋势线的价格值写进一个数组。
如果没有对象,我怎样才能从数组中删除一个值?
artmedia70:如果我们在每个tick上运行趋势线价格的值,初始化数组,并在找到下一个必要的趋势线价格时增加其维度,那么就不需要从数组中删除被删除的趋势线的值。这个数组将是动态的,每次在每个刻度上,它将只包含现有对象的值。
我试图在一个单独的窗口中从收盘价 中制作一个围绕0的震荡器,但我做不到。也许有人已经做了,你能告诉我公式吗?
例如,我们有Close[i]价格,我需要这个价格像MACD/CCI那样在一个单独的窗口中高于/低于零,但我尽量尝试,如果没有MA等附加值,我无法做到这一点:现在,如果我减去iClose-iMA,我得到类似的东西,但也许有没有平滑的变种?
或者在0.0...1.0的范围内,如果没有办法绕过零...
下面这个的搜索方法略有不同。
在图中添加两条白色的趋势线,并加上相应的名称,就可以了。
不要写一公里长的函数,把程序分成短的 "短语"--"砖块"。小的 "砖头 "制造更大的 "砖头",而大的 "砖头 "制造更大的 "砖头"。你看,这是有可能的。
仅仅通过参数将所有数据传递给函数。
如果被调用的函数失败,一定要处理好错误,如果错误被忽略,进一步的行动将产生严重的后果。绝大多数程序崩溃(一般来说)的发生是因为错误处理没有以任何方式编程。
例如,如果调用ArrayResize()来扩大数组的大小,返回了一个错误,而程序员没有检查,并引用了所谓的扩大的数组,就会发生一个错误,导致MQL4程序后来停止工作。例如,专家顾问通过留下未结头寸来停止交易。这不是很好吗?
尝试在函数MassTrendNumber()的循环之前插入 "array[0] = 0;",并确保脚本在数组超限错误后结束。
我试图在一个单独的窗口中从收盘价中制作一个围绕0的震荡器,但我做不到。也许有人已经做了,你能告诉我公式吗?
例如,我们有Close[i]价格,我需要这个价格像MACD/CCI那样在一个单独的窗口中高于/低于零,但无论我如何努力,如果没有MA这样的附加值,我无法做到这一点:现在,如果我减去iClose-iMA,我得到类似的东西,但也许有不用平滑的变种?
或者在0.0...1.0的范围内,如果没有办法绕过零...
https://www.mql5.com/ru/code/9340
https://www.mql5.com/ru/code/9340
哦,这就对了。在这个世界上,没有什么是新的))))。
下面的搜索方法略有不同。
在图表上添加两条白色的趋势线,并加上相应的名称,你就可以了。
不要写一公里长的函数,把程序分成短的 "短语"--"砖块"。小的 "砖头 "制造更大的,大的制造更大的。你看,这是有可能的。
只通过参数向函数传递所有数据。
如果被调用的函数失败,一定要处理好错误,如果错误被忽略,后续的行动将产生严重的后果。绝大多数程序崩溃(一般来说)的发生是因为错误处理没有以任何方式编程。
例如,如果调用ArrayResize()来扩大数组的大小,返回了一个错误,而程序员没有检查,并引用了所谓的扩大的数组,就会发生一个错误,导致MQL4程序后来停止工作。例如,专家顾问通过留下未结头寸来停止交易。这不是很好吗?
尝试在MassTrendNumber()的循环之前插入 "array[0] = 0;",并确保脚本在数组超限错误后终止。
是的,非常感谢你,你简直是无话可说,多么有帮助,如此清晰!你是如何做到的?真棒!!!。