Ваши вопросы по языку MQL4

Да, но не обязательно до 8, может быть и больше.
И получается, что информация в Окне данных совершенно в этом помочь не может? Если может - то как? И как открыть Окно данных, не найду никак. Извините - забросал Вас вопросами.
 
Спасибо, что ответили. Интересуют буфера сигналов этих двух индикаторов. Хорошо бы понять, как их определить.
В индикаторе Super Trend сигналом является смена цвета линии индикатора. Во втором - четкие точки-сигналы на покупку и продажу.
Super Trend
сигнальный буфер 2, он значения принимает от 1 до -1, сигнал это и есть такое изменение (смотри скрин).
neurotrend
там буферные стрелки (в виде точек), номера буферов в настройках видно (смотри скрин).
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    59,5 КБ · Просмотры: 46
  • Screenshot_2.png
    Screenshot_2.png
    191,6 КБ · Просмотры: 45
Super Trend
сигнальный буфер 2, он значения принимает от 1 до -1, сигнал это и есть такое изменение (смотри скрин).
neurotrend
там буферные стрелки (в виде точек), номера буферов в настройках видно (смотри скрин).
Спасибо. Значит если я правильно понял SuperTrend - буфера сигналов Buy и Sell имеют одно из трех значений: 1; 0; -1 А точно определить можно перебором.
В neurotrend буфер Buy равен 4; буфер Sell равен 5.
Правильно?
 
Спасибо. Значит если я правильно понял SuperTrend - буфера сигналов Buy и Sell имеют одно из трех значений: 1; 0; -1 А точно определить можно перебором.
В neurotrend буфер Buy равен 4; буфер Sell равен 5.
Правильно?
SuperTrend
буфер 2 называется трендом, он имеет только два значения, либо 1,либо -1. Когда он меняет значение от -1 до 1 это сигнал вверх, наоборот-вниз.Нет у буфера значений 0.
neurotrend
буфер 4 (Buy), 4 -это номер буфера по порядку . Когда нет сигнала он "пустой" (EMPTY_VALUE), когда "не пустой" ( !=EMPTY_VALUE) это сигнал.
 
это как с тма в тестере. как решить проблему работу тестера с тма каналом. так сказать подсказка. (тма канал в оригинале грузит тестер стратегии на полную.)
 
Код:
//+------------------------------------------------------------------+
//| 789v2.mq4 |
//+------------------------------------------------------------------+
#property version "1.00"
#property strict

//-----Входные данные
extern int    SL = 100;   //Стоплос
extern int    TP = 450;   //Тейкпрофит
extern int    MG = 456789;//Магик
extern int    SP = 30;    //Слиппейдж
extern double LT = 0.01;  //Объем сделки
extern double ak = 0.01;  //ариф коэф
extern int    gk = 3;     //геом коэф
extern color clolor_buy   = clrAliceBlue;//Цвет ордеров бай
extern color color_sell   = clrAliceBlue;//Цвет ордеров селл
extern color celevoj_prof = clrAliceBlue;//Цвет целевого профита
extern color one_liniay   = clrAliceBlue;//Цвет первой линии
extern color two_liniay   = clrAliceBlue;//Цвет второй линии

class LastOrder
{
    private:
    int order_tiket;
    datetime last_time;
    
    public:
    int FindLastOrdrer(int type = -1)
    {
        int ticket = -1;
        datetime dt = 0;
        int cnt = HistoryTotal();
        
        for(int i=0; i < cnt; i++)
        {
            if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
            if(OrderSymbol() != Symbol()) continue;
            if(OrderMagicNumber() != 456789) continue;
            if(type != -1 && OrderType() != type) continue;
            
            if(OrderCloseTime() > dt)
            {
                dt = OrderCloseTime();
                ticket = OrderTicket();
            }
        }
        order_tiket = ticket;
        return order_tiket;
    }
} LO;

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class Lot
{
    private:
    double lt;
    public:
    double fiks_lot()
    {
        return lt=0.01;
    }
    
    double dannij_lot(double lot)
    {
        lt=lot;
        return lt;
    }
    
    double min_lot()
    {
        lt = MarketInfo(_Symbol,MODE_MINLOT);
        return lt;
    }
    
    double max_lot()
    {
        lt = MarketInfo(_Symbol,MODE_MAXLOT);
        return lt;
    }
    
    double balance_lot()
    {
        lt = NormalizeDouble(MathCeil(AccountBalance()/100)/100,2);
        return lt;
    }
    
    double eqitity_lot()
    {
        lt = NormalizeDouble(MathCeil(AccountEquity()/100)/100,2);
        return lt;
    }
    
    double ArifPlus(int ticket, double koef)
    {
        if(OrderSelect(ticket,SELECT_BY_TICKET)==true)
        {
            if(OrderLots()+ koef > min_lot() || OrderLots()+ koef > max_lot())
            {
                double profit = OrderProfit()+OrderCommission()+OrderSwap();
                
                if(profit>0.00001)
                    lt = OrderLots()+ koef;
                else
                    lt = OrderLots();
            }
        }
        return lt;
    }
    
    double GeomPlus(int ticket, double koef)
    {
        if(OrderSelect(ticket,SELECT_BY_TICKET)==true)
        {
            double profit = OrderProfit()+OrderCommission()+OrderSwap();
            
            if(OrderLots()* koef > min_lot() || OrderLots()* koef > max_lot())
            {
                if(profit>0.00001)
                    lt = OrderLots()* koef;
                else
                    lt = OrderLots();
            }
        }
        return lt;
    }
} VL;

enum order_lot
{
    fiks_lot,//фиксированый
    dannij_lot,//данный лот
    min_lot,//минимальный
    max_lot,//максимальный
    balance_lot,//лот баланса
    eqity_lot,//лот по эквити
    arif_lot,//лот ариф
    geom_lot//лот геом
};

sinput order_lot o_lot = 0;//Вид лота
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
    //---
    if(OrdersTotal()==0)
    {
        Comment(LO.FindLastOrdrer());//это строка работает.
        int ticketss = OrderSend(_Symbol,OP_SELL,Ust_lot(),Bid,30,NormalizeDouble(Ask+700*Point,Digits),NormalizeDouble(Bid-1400*Point,Digits),NULL,456789,0,color_sell);
    }
}

//+------------------------------------------------------------------+
double Ust_lot(double lot= 0.03)
{
    switch(o_lot)
    {
        case 0://фиксированный лот
        lot = 0.01;
        break;
        case 1://данный лот
        lot = VL.dannij_lot(0.05);
        break;
        case 2://минимальный лот
        lot = VL.min_lot();
        break;
        case 3://максимальный лот
        lot = VL.max_lot();
        break;
        case 4://лот по балансу
        lot = VL.balance_lot();
        break;
        case 5://лот по эквити
        lot = VL.eqitity_lot();
        break;
        case 6:
        lot = VL.ArifPlus(LO.FindLastOrdrer(),ak);// строка 160 работает правильно а это 188 не возвращает нужное число
        break;
        case 7:
        lot = VL.GeomPlus(LO.FindLastOrdrer(),gk);
        break;
    }
    return lot;
}

Когда выбираешь лот по ариф или геом не работает. Скажите пожалуйста почему?
 
Нужен совет профессионалов! Решил первый свой советник написать). Может подскажет кто, какой структура запроса на открытие рыночной позиции у брокера Tickmill,demo,hedge. Вот такой выдаёт ошибку некорректный filling order.
trade_request.action = TRADE_ACTION_DEAL;
trade_request.symbol = _Symbol;
trade_request.volume = Lot;
trade_request.type = type;
trade_request.type_filling = ORDER_FILLING_FOK;
trade_request.deviation = Slippage;
trade_request.magic = Magic;
trade_request.tp = NormalizeDouble(price + TakeProfit * point, digits);
Или где эту информацию у брокеров искать?
 
Нужен совет профессионалов! Решил первый свой советник написать). Может подскажет кто, какой структура запроса на открытие рыночной позиции у брокера Tickmill,demo,hedge. Вот такой выдаёт ошибку некорректный filling order.
trade_request.action = TRADE_ACTION_DEAL;
trade_request.symbol = _Symbol;
trade_request.volume = Lot;
trade_request.type = type;
trade_request.type_filling = ORDER_FILLING_FOK;
trade_request.deviation = Slippage;
trade_request.magic = Magic;
trade_request.tp = NormalizeDouble(price + TakeProfit * point, digits);
Или где эту информацию у брокеров искать?
"Всё или ничего" ORDER_FILLING_FOK не прокатывает. Возможно прокатит "Всё или частично" ORDER_FILLING_IOC.
Узнать какие заливки прокатывают можно запросив информацию по символу
SymbolInfoInteger с параметром SYMBOL_FILLING_MODE
.
 
Нужен совет профессионалов! Решил первый свой советник написать). Может подскажет кто, какой структура запроса на открытие рыночной позиции у брокера Tickmill,demo,hedge. Вот такой выдаёт ошибку некорректный filling order.
trade_request.action = TRADE_ACTION_DEAL;
trade_request.symbol = _Symbol;
trade_request.volume = Lot;
trade_request.type = type;
trade_request.type_filling = ORDER_FILLING_FOK;
trade_request.deviation = Slippage;
trade_request.magic = Magic;
trade_request.tp = NormalizeDouble(price + TakeProfit * point, digits);
Или где эту информацию у брокеров искать?
а изучить метод запроса на открытие ордера не судьба?
 
trade_request.type_filling = ORDER_FILLING_FOK;
Удалить и не думать об этом, вот и все дела ). И без этого прокатит... ). А если нет совсем желания разбираться в MqlTradeRequest, MqlTradeResult, MqlTradeCheckResult, использовать библиотеку Trade.mqh надо, объект класса CTrade объявить и с ним там уже упрощённо работать, типа того.

P.S. По умолчанию там ORDER_FILLING_RETURN стоит... вот и пусть себе стоит ).
P.P.S. Ну так с "НАСКОКА", там не удастся разобраться в тонкостях... Читать и вникать в хелп по языку - обязательно ))).
 
Последнее редактирование:
Надо это все сделать одним индикатором,,
Один индикатор не может одновременно рисовать свои графики и на ценовом графике и в подвале. Если много расчетов запихать в один индикатор, то он будет отнимать много времени у терминала и тот будет ругаться и требовать переписать индикатор, т.к. время обработки каждого индикатора ограничено в терминале.
А если разделено на несколько индикаторов, то для каждого отдельно выделяется терминальное время и все счастливы.:cool:
 
  • Like
Реакции: kpll
Один индикатор не может одновременно рисовать свои графики и на ценовом графике и в подвале. Если много расчетов запихать в один индикатор, то он будет отнимать много времени у терминала и тот будет ругаться и требовать переписать индикатор, т.к. время обработки каждого индикатора ограничено в терминале.
А если разделено на несколько индикаторов, то для каждого отдельно выделяется терминальное время и все счастливы.:cool:
хорошо что я об этом не знаю, а то бы мой индюк не работал бы.:ROFLMAO:
Бывают лишь не состыковки в коде из за функционала и стиля написания по этому и приходится искать подходящие синтексисы и т.д. что бы совместить два и более индюка в один.
 
Последнее редактирование модератором:
Один индикатор не может одновременно рисовать свои графики и на ценовом графике и в подвале. Если много расчетов запихать в один индикатор, то он будет отнимать много времени у терминала и тот будет ругаться и требовать переписать индикатор, т.к. время обработки каждого индикатора ограничено в терминале.
А если разделено на несколько индикаторов, то для каждого отдельно выделяется терминальное время и все счастливы.:cool:
Вот тебе пример. Один индюк и в подвале и на экране одновременно, не нужно говорить что такое не возможно.
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    67,3 КБ · Просмотры: 117
Вот тебе пример. Один индюк и в подвале и на экране одновременно, не нужно говорить что такое не возможно.
Такого нет в принципе! Скинь посмотреть.))) У каждого индюка есть только один выбор - рисовать свой график или на ценовом, или в подвале. Стрелки и т.п. не учитываем - это графические элементы, а не буферный график индикатора.
Есть возможность создавать окно из индикатора с помощью спец функций, но это утроение загрузки на процессор как минимум.
В каждом индикаторе есть только 1 выбор в строке типа #property indicator_chart_window или #property indicator_separate_window и только в выбранном варианте он будет рисовать буферные расчеты!
Не нужно говорить что возможно и что нет - есть разные изначальные расчеты и речь идет об индикаторах с буферным расчетом. Все остальные - тормоз для терминала. Хотя и в последних билдах старые разработки стали десятикратно тормозить безо всякой графики...
 
Последнее редактирование:
Вот тебе пример. Один индюк и в подвале и на экране одновременно, не нужно говорить что такое не возможно.
Скрин со всех сторон обрубленный и сколько там индюков не видно. Не видно не тест ли это, где запускается 1 индюк, который запускает другой. Слишком много мути в твоем скрине!
 
Скрин со всех сторон обрубленный и сколько там индюков не видно. Не видно не тест ли это, где запускается 1 индюк, который запускает другой. Слишком много мути в твоем скрине!
ну ты даёшь. Когда устанавливаешь два индюка один на основном а другой в подвале тогда показывает-окно1 и окно2 и т.д., а здесь только окно1. :ROFLMAO: :ROFLMAO: :ROFLMAO:
И да, я такой ерундой не занимаюсь которое ты озвучил.
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    174,9 КБ · Просмотры: 55
Последнее редактирование модератором:
Вот теперь два индюка установлено в подвале, а отображается и там и там как три и ничего не обрезано.
Ладно мучать не буде всё просто, индикатор который должен отображаться в основном окне делаешь через графическое отображение, а подвал через буфер и не будет ничего конфликтовать, а вы пытаетесь нагрузить буфера тем что не совместимо. Вот и весь секрет. :cool:
 

Вложения

  • Screenshot_2.png
    Screenshot_2.png
    66,7 КБ · Просмотры: 79
  • Screenshot_3.png
    Screenshot_3.png
    23,8 КБ · Просмотры: 73
Последнее редактирование:

Посмотрели (401) Посмотреть

Отслеживают (499) Посмотреть

Назад
Верх