Результат поиска - Инвестиционный форум | InvestSocial
Ночь

Вход

 | 
Регистрация
Пока нет объявлений.
56 результатов за 0.0588 секунд.
Ключевые слова
Участники
Метки

  • Тогда, как уже подсказали, ошибка в значениях стопов. Проверять нужно значения i_sl и i_tp. Поскольку нигде в коде не указано что это за переменные и откуда они берутся, ничего конкретного сказать не могу. Почитайте про MarketInfo(Symbol(), MODE_STOPLEVEL)...
    Показать больше | К сообщению

    Прокомментировать:


  • Ошибка тут :
    MQL код:

    if(g_type == OP_BUY)


    Надо так

    MQL код:

    if(OrderType() == OP_BUY)
    {
    ...
    }
    if(OrderType() == OP_SELL)
    {
    ...
    }


    А тут

    MQL код:

    if(OrderStopLoss() != sl || OrderTakeProfit() != tp) // Если полученные значения sl и tp не равныы 0, то..
    {
    OrderModify(g_ticket,OrderOpenPrice(),sl,tp,OrderO penTime() + 86400,Lime); // Модифицируем ордер
    }


    Поменять так

    MQL код:

    if(OrderStopLoss() != sl || OrderTakeProfit() != tp) // Если полученные значения sl и tp не равныы 0, то..
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,O rderOpenTime() + 86400,Lime); // Модифицируем ордер
    }


    Ошибка в том что перебираются ордера,...
    Показать больше | К сообщению

    Прокомментировать:


  • Либо стопы намного больше чем тейки, либо допускаются большие просадки и в итоге советник закрывает позицию в большой минус. Избавляйтесь от просадок и стопы ставьте ближе тейков. Это выявит все слабые места стратегии(в частности - неправильные точки входа и выхода). Невозможно заменить определение точек входа всякими уловками и иметь положительный результат....
    Показать больше | К сообщению

    Прокомментировать:


  • Это нетривиальная задача - получить значения какой-то линии, не имея доступа к буферу её значений, если вообще выполнимая. Самое простое что можно тут сделать - использовать iCustom с каким-то пользовательским индикатором. Во вложения я положил три индикатора. Два - строят фракталы на основе показаний пользовательских индикаторов. CustomFractals предназначен для индикаторов в окне графика, CustomFractalsBasement - для индикаторов в подвале. Третий индикатор кинул для тестов - на нём можно посмотреть результат. При построении учитываются параметры индикатора по-умолчанию...
    Показать больше | К сообщению

    Прокомментировать:


  • Видимо так

    MQL код:

    double tickValue = MarketInfo(Symbol(), MODE_TICKVALUE);


    Зайдите в справку и почитайте про функцию MarketInfo (она находится в разделе "Общие функции") - при помощи неё можно получить много полезной информации....
    Показать больше | К сообщению

    Прокомментировать:


  • Оператор сравнения == , а не =. Естественно будет глючить условие - Вы присваиваете переменной a переменную b вместо их сравнения.

    MQL код:

    if( (а == в) && (в > 0) )
    {
    fDo_Smthing();
    }
    Показать больше | К сообщению

    Прокомментировать:


  • Цикл, который перебирает текущие позиции

    MQL код:

    int total = PositionsTotal();// количество существующих позиций по символам
    for(int index = total-1; index>=0; index--)
    {
    PositionSelect(PositionGetSymbol(index));
    // тут можно получать параметры выбранной на текущей итерации позиции
    // её символ можно проверить вызвав PositionGetSymbol(index)
    }
    ...
    Показать больше | К сообщению

    Прокомментировать:


  • Нет. Если другой таймфрейм, то и индексы у него свои. Сначала идёт цикл по индексам одного таймфрейма, находятся фракталы, строится трендовая линия(по параметрам фракталов, время получается не как Time[i] а как iTime(Symbol(), period, i)). Затем идёт цикл по индексам текущего таймфрейма от начала построения трендовой линии до текущего момента и ищет точку пересечения. Или наоборот. Известно время первой(левой) координаты трендовой линии - пусть будет time1. Индекс свечи , соответствующей этому времени на периоде period будет рассчитываться так

    MQL код:


    int trendLineStartIndex = iBarShift(Symbol(), period, time1);
    Чтобы понять какой индекс на одном таймфрейме соответствует какому индексу на другом таймфрейме можно использовать такую функцию

    MQL код:

    int GetIndex(int index, int _period)
    {
    return(iBarShift(Symbol(), _period, iTime(Symbol(), Period(), index)));
    }

    Эта функция вернёт индекс...
    Показать больше | К сообщению

    Прокомментировать:


  • А что если попробовать удалять объекты первым делом в init(), а затем инициализировать всё что надо? Можно вызвать ObjectsDeleteAll и указать чтобы удалял только трендовые линии. Нужно учесть что он удалит и чужие трендовые линии на графике если они есть, но поскольку имена трендовых линий содержат значения дат, как я понимаю, удалять их по имени нереально, и это плохо. Это, конечно, костыль, но не видя полного кода индикатора сказать что это за линия и почему она не удаляется невозможно.
    Показать больше | К сообщению

    Прокомментировать:


  • Проще всего, чтобы один советник следил за всем, независимо от того, на графике какого символа он выставлен. Для каждого символа заводим свой magic. Перед открытием ордера проверяем magic всех текущих ордеров и сравниваем с нашим magic по символу. Если нет ордера с таким magic - можно открывать.

    Код не проверял, но должен работать. TryOpenOrder попробует открыть ордер на указанном символе. Если уже открыт ордер - ничего не произойдёт и функция вернёт false.

    MQL код:

    #define MAGIC_NUMBER_EURUSD 26341
    #define MAGIC_NUMBER_GBPUSD 26342
    #define MAGIC_NUMBER_EURJPY 26343
    #define MAGIC_NUMBER_EURGBP 26344
    #define MAGIC_NUMBER_EURAUD 26345


    bool TryOpenOrder(string symbol, int orderType, double orderLots)
    {
    if(CheckIsOrderOpened(symbol) == true)
    return(false);

    int MagicNumber = GetMagicBySymbol(symbol);
    double price = MarketInfo(symbol, MODE_ASK);
    if(orderType
    ...
    Показать больше | К сообщению

    Прокомментировать:


  • При переключении таймфреймов все индикаторы на графике пересчитываются. Можно привязать индикатор к определённому таймфрейму, который указать в настройках. При этом все индикаторы, доступ к таймсессиям делать только для этого таймфрейма.

    MQL код:

    extern int IndicatorTimeframe = PERIOD_H1;

    ...

    // доступ к таймсессиям делать так
    iClose(Symbol(), IndicatorTimeframe , index);
    iHigh(Symbol(), IndicatorTimeframe , index);

    // расчёт индикаторов
    iFractals(Synbol(), IndicatorTimeframe, MODE_UPPER, index);


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

    Прокомментировать:


  • Привет, Ольга. Я тут сморозил немного. Не нужно отнимать угол от 180. Т.е. должно быть return(angleInDegrees);
    Мы получаем косинус угла по формуле. Чтобы получить угол нужно применить функцию арккосинус к этому значению. Но в результате получаем значение угла в радианах. Чтобы было более понятно - надо перевести угол из радиан в градусы, что делается по формуле Значение_Угла_В_Радианах*180/Число_ПИ.

    Функция возвращает значение угла между трендовыми линиями в градусах....
    Показать больше | К сообщению

    Прокомментировать:


  • Недостающего куска кода нету - здесь просто запрограммирована математическая формула расчёта угла между двумя линиями, каждая из которых задана двумя точками на плоскости. Точки трендовых линий задаются ценой и временем. Т.е. это их природа такая в терминале, поэтому ничего мы не смешиваем.

    Насчёт масштаба - киньте трендовую линию на график. Нажмите кнопку 'Увеличить' или 'Уменьшить'. Угол трендовой линии изменится. Тем не менее координаты трендовой линии останутся прежними. Следовательно её реальный угол тоже останется прежним(видимый угол - искажение полученное при масштабировании терминалом графика). Я не знаю как можно получить координаты трендовой линии относительно окна в пикселях(это позволило бы рассчитать видимый угол) - только относительно графика в цене и времени(тут появляется проблема масштаба)....
    Показать больше | К сообщению

    Прокомментировать:


  • Можно сделать так

    MQL код:

    // возвращает значение угла в градусах
    double GetAngleBetweenTrendLines(string firstTrendLineName, string secondTrendLineName)
    {
    if(ObjectFind(firstTrendLineName) == -1 || ObjectFind(secondTrendLineName) == -1)
    {
    return(-1);
    }

    double A1, B1 ,C1;
    double A2, B2, C2;
    GetTrendLineCoefficients(firstTrendLineName, A1, B1, C1);
    GetTrendLineCoefficients(secondTrendLineName, A2, B2, C2);
    double cosAlpha = MathAbs(A1*A2 + B1*B2)/(MathSqrt(A1*A1 + B1*B1)*MathSqrt(A2*A2 + B2*B2));
    double angleInRadians = MathArccos(cosAlpha);
    double angleInDegrees = angleInRadians * 180 / 3.14;
    return(180 - angleInDegrees);
    }


    bool GetTrendLineCoefficients(string name, double &A, double &B, double &C)
    {
    int lineID = ObjectFind(name);
    ...
    Показать больше | К сообщению

    Прокомментировать:


  • Если есть подозрения что в каком-то файле присутствует вредоносный код, можно воспользоваться сервисом _https://www.virustotal.com/. В Вашем случае отправьте туда dll файл. Сервис прогоняет файл рядом антивирусов и выводит результат....
    Показать больше | К сообщению

    Прокомментировать:

X
`