Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1121

 
Roman:

Потому что изначально много несоответствий текущим реальностям.
И вы под эти несоответствия пытаетесь находить оправдания.
Как раз наоборот, я писал что тик не равен пункту!
Это у вас пункт свой внутренний, придуманный.
Ввиду того что Point раньше соответствовал именно пункту, когда был только четырёх знак.
Но после ввода пятого разряда, у вас началось придумывание названий своими оправданиями. 

Нет, не так. Вы предлагали показывать дистанцию не в пунктах, а в размерах тика.

Это глупость. Дистанция - это расстояние. А размер тика - это шаг, на который минимально за один раз движется цена.

Поэтому вы просите показывать не расстояние от точки А до точки Б, а количество шагов, за которые можно пройти это расстояние.

Говорю же - смешалось всё...

Ваша реальность какая-то куцая. Нет в ней половины общепринятых понятий. Есть что-то из своей головы.

 
Roman:

Наверно потому, что нужно вернуть возвращаемое значение из функции.

Спасибо за ответ, но по прежнему проблема не решена... Мне нужно, чтобы параметр функции "str" возвращал в MQL свое измененное состояние

extern "C" __declspec(dllexport) wchar_t* __stdcall ToString(wchar_t* &str)
{
        str = L"-- Я изменил параметр str :) --"; // Вот это я хочу получить!
        return L"--- Привет! ---";
}

В MQL4 в это время:

#import  "Win32Project1.dll"
   string ToString(string &str);
#import

Ну и сам вызов функции:

string str = "";
Print("-> Метод: " + ToString( str ));
Print("-> Параметр: " + str);

В результате получаю это:

т.е. параметром передается значение, но оно не корректное... Как мне решить этот вопрос? :)

 
Vadim Lin:

Спасибо за ответ, но по прежнему проблема не решена... Мне нужно, чтобы параметр функции "str" возвращал в MQL свое измененное состояние

В MQL4 в это время:

Ну и сам вызов функции:

В результате получаю это:

т.е. параметром передается значение, но оно не корректное... Как мне решить этот вопрос? :)

Господин отдыхает сутки за троллинг.
 
Artyom Trishkin:

При падении терминала, его придётся перезапускать. Индикатор придётся заново накидывать на график, либо запускать советник, использующий данные этого индикатора (тогда советник сам подгрузить этот индикатор при обращении к нему). При этом (да и даже при штатном перезапуске терминала с автоматической загрузкой установленных на графике программ), индикатор заново нарисует все свои линии - не нужно ничего никуда сохранять. Эти линии можно потом заново прочесть. Тем более, что их и так нужно считывать.

А чтобы советник мониторил только линии, созданные индикатором, достаточно посмотреть имена создаваемых им линий, и попробовать найти в именах повторяющиеся - одинаковые для всех линий - подстроки. Вот по этим подстрокам-то и искать нужные линии.

Всё просто - достаточно заглянуть в список объектов при запущенном индикаторе.

Мы вообще отходим от темы! Чем дальше дискутируем, тем сильнее не в тему! :)

Человеку всего-то требовалось получить СОБЫТИЕ, когда цена пересекает линию...

Дальше, я начал предполагать, почему мой пример "проблемный",.. Хотя по сути он решает ту задачу, которая в принципе была поставлена. Далее - уже фантазии автора, я помог чем смог))


Если не по теме,... и перегрузить терминал, то линии никуда не денутся, и есть вероятность того, что они останутся на своих местах. Если они будут переименованы, или меткой помечены - то с помощью обычной логики можно понять, что эти линии уже срабатывали когда-то, и их следует игнорировать. Но этой задачи то и не стояло)) К тому же, предположим, индикатор заново нарисует линии, а что с того? Как ты определишь, что часть из них уже сработала?))

Если на графике НЕТ НИЧЕГО, кроме линий, которые необходимо мониторить (как утверждал сам автор), то по идее их даже и фильтровать по имени нет никакой необходимости))

А так безусловно, можно по идее вообще и не рисовать никаких линий, а сохранять тогда уж все уровни в файл, и отмечать какие из них уже сработали. И перегружай хоть сколько терминал, ты будешь их помнить и без имен обьектов))

 
Roman:

 Ну где блин логика ребят.
По этому это грубая ошибка, а если намерено сделано так, то диверсия ))

Петька: а что такое логика, Василий Иванович?

В.И: ну это просто, вот смотри, у тебя спички есть?

Петька: да есть!

В.И. ну значит ты куришь, а если куришь, то и выпиваешь, а если выпиваешь, то и по девкам гуляешь, понятно?

Петька: ага, все просто!

Петька к проходившему мимо красноармейцу - спички есть?

Красноармеец: нет

Петька: ну значит ты "голубой"



ЛОГИКА, ну она такая вот странная, и под ЛОГИКУ, не нужно свои ожидания подстраивать

если разработчик заложился на новый тип данных ENUM_TIMEFRAMES , значит он заложился на дальнейшее использование этого типа в других участках программы - вот это логика


ЗЫ: можно конечно порассуждать, что МТ4 проектировали люди которые представляли, что нужно для трейдинга, а "другой терминал" писала группа инопланетян .... но мы выйдем за формат общения этого форума, поэтому про диверсии не стоит - что дали то и юзаем, что не хватает, то пишем сами, благо производительности терминала хватает с головой

кактотак

 
Igor Makanu:


ЛОГИКА, ну она такая вот странная, и под ЛОГИКУ, не нужно свои ожидания подстраивать

если разработчик заложился на новый тип данных ENUM_TIMEFRAMES , значит он заложился на дальнейшее использование этого типа в других участках программы - вот это логика


ЗЫ: можно конечно порассуждать, что МТ4 проектировали люди которые представляли, что нужно для трейдинга, а "другой терминал" писала группа инопланетян .... но мы выйдем за формат общения этого форума, поэтому про диверсии не стоит - что дали то и юзаем, что не хватает, то пишем сами, благо производительности терминала хватает с головой

кактотак

хорошо хоть в синтаксисе логику не так часто ищут)))) Логика в быстродействии проглядывается в случае с таймфреймами, но могу ошибаться) 

 
Igor Makanu:

Петька: а что такое логика, Василий Иванович?

Я слышал другой вариант:

Анка селёдку ест? Значит она воду пьёт ...

Логический вывод, значит её ... можно.

 
Vadim Lin:



НО, что если Bid по какой-то причине перескочил линию, и не был равен цене линии, тогда что?... Предусмотрите тогда хотя бы переменную, в которой храниться предыдущий тик, и если было пересечение нового тика вашей линии - то делайте какие-то действия... Но в этом случае не забудьте предусмотреть "допустимое" пересечение, так как если рынок откроется с Гэпом большим, или просто произойдет большой скачек цены, то вы махом откроетесь по множеству линий, и возможно не там, где хотите. Пусть при пересечении больше допустимого - выдается только сообщение,..

Спасибо за помощь, действие происходит при выставлении линий в ручную и пересечении этих линий, но линии индикатора почему-то советник не видит и не производит указанное мной действие. У всех линий индикатора есть в названии следующая фраза @Line (плюс нумерация "week-4", которая меняется) - может это как-то использовать?

//+------------------------------------------------------------------+
void OnTick()
  {
//---
        iCustom(Symbol(), 0, "ITS-Level Gun", 0, 0);  
 
        for(int i = ObjectsTotal() - 1; i >=0; i--) {

// все что не горизонтальные линии - игнорируем

        if(ObjectType(ObjectName(i)) != OBJ_HLINE) continue; 

        double PriceLine = NormalizeDouble(ObjectGet(ObjectName(i), OBJPROP_PRICE1), Digits());
        
// измените условие Bid == PriceLine
        
             if(Bid == PriceLine)
             {
  {OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);}
        } 
  
  }
  }
//+------------------------------------------------------------------+
Файлы:
 
Неправильно написал: название самих линий не изменяется, но у всех в названии есть общая фраза @Line
 
Fib0 RU:
Неправильно написал: название самих линий не изменяется, но у всех в названии есть общая фраза @Line
if(Bid == PriceLine)

это не пройдет

почитайте

Особенности работы с числами типа double в MQL4
Особенности работы с числами типа double в MQL4
  • www.mql5.com
При программировании на языке MQL4 у новичков порой возникают ситуации, когда результаты некоторых математических вычислений отличаются от ожидаемых. При этом программа компилируется и работает, но не так, как нужно. Они начинают разбираться в программе, находят новые "ошибки" в языке, реализации функций и т.п. В большинстве случаев последующий...
Причина обращения: