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

Раздел: Язык программирования MQL4
Автор темы: chocolate
Создана: 2011-11-07 10:37
Ответов: 9576 | Просмотров: 1107106
Страница 477 из 479
Источник: https://forexsystemru.com/threads/65289/page-477

---

## krampe87 — 2025-03-15 15:44

> Цитата (MakarFX):
> Да, но не обязательно до 8, может быть и больше.

И получается, что информация в Окне данных совершенно в этом помочь не может? Если может - то как? И как открыть Окно данных, не найду никак. Извините - забросал Вас вопросами.

## блондинка — 2025-03-15 16:33

> Цитата (krampe87):
> Спасибо, что ответили. Интересуют буфера сигналов этих двух индикаторов. Хорошо бы понять, как их определить.
> В индикаторе Super Trend сигналом является смена цвета линии индикатора. Во втором - четкие точки-сигналы на покупку  и продажу.

Super Trend
сигнальный буфер 2, он значения принимает от 1 до -1, сигнал это и есть такое изменение (смотри скрин).
neurotrend
там буферные стрелки (в виде точек), номера буферов в настройках видно (смотри скрин).

## krampe87 — 2025-03-15 16:43

> Цитата (блондинка):
> Super Trend
> сигнальный буфер 2, он значения принимает от 1 до -1, сигнал это и есть такое изменение (смотри скрин).
> neurotrend
> там буферные стрелки (в виде точек), номера буферов в настройках видно (смотри скрин).

Спасибо. Значит если я правильно понял SuperTrend - буфера сигналов Buy и Sell имеют одно из трех значений: 1; 0; -1     А точно определить можно перебором.
В neurotrend  буфер Buy равен 4; буфер Sell равен 5.
Правильно?

## блондинка — 2025-03-15 16:57

> Цитата (krampe87):
> Спасибо. Значит если я правильно понял 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) это сигнал.

## Viktor73 — 2025-03-15 18:46

можно же скрыть буферы и для окна

## Viktor73 — 2025-03-15 18:48

это как с тма в тестере. как решить проблему работу тестера с тма каналом. так сказать подсказка. (тма канал в оригинале грузит тестер стратегии на полную.)

## MakarFX — 2025-03-16 08:31

> Цитата (krampe87):
> И как открыть Окно данных, не найду никак

## star603 — 2025-03-22 17:06

```
//+------------------------------------------------------------------+
//| 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;
}
```

Когда выбираешь лот по ариф или геом не работает. Скажите пожалуйста почему?

## star603 — 2025-03-22 18:08

проблема решена

## АлексК — 2025-05-12 17:52

Нужен совет профессионалов! Решил первый свой советник написать). Может подскажет кто, какой структура запроса на открытие рыночной позиции у брокера 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);
Или где эту информацию у брокеров искать?

## Ugar — 2025-05-12 19:01

> Цитата (АлексК):
> Нужен совет профессионалов! Решил первый свой советник написать). Может подскажет кто, какой структура запроса на открытие рыночной позиции у брокера 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
.

## Viktor73 — 2025-05-12 20:07

> Цитата (АлексК):
> Нужен совет профессионалов! Решил первый свой советник написать). Может подскажет кто, какой структура запроса на открытие рыночной позиции у брокера 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);
> Или где эту информацию у брокеров искать?

а изучить метод запроса на открытие ордера не судьба?

## ZenFX — 2025-05-12 20:31

> Цитата (АлексК):
> trade_request.type_filling = ORDER_FILLING_FOK;

Удалить и не думать об этом, вот и все дела ). И без этого прокатит... ). А если нет совсем желания разбираться в MqlTradeRequest, MqlTradeResult, MqlTradeCheckResult, использовать библиотеку Trade.mqh надо, объект класса CTrade объявить и с ним там уже упрощённо работать, типа того.

P.S. По умолчанию там ORDER_FILLING_RETURN стоит... вот и пусть себе стоит ).
P.P.S. Ну так с "НАСКОКА", там не удастся разобраться в тонкостях... Читать и вникать в хелп по языку - обязательно ))).

## vladradon — 2025-10-07 10:19

> Цитата (kpll):
> Надо это все сделать одним индикатором,,

Один индикатор не может одновременно рисовать свои графики и на ценовом графике и в подвале. Если много расчетов запихать в один индикатор, то он будет отнимать много времени у терминала и тот будет ругаться и требовать переписать индикатор, т.к. время обработки каждого индикатора ограничено в терминале.
А если разделено на несколько индикаторов, то для каждого отдельно выделяется терминальное время и все счастливы.:cool:

## dobi82 — 2025-10-07 10:33

> Цитата (vladradon):
> Один индикатор не может одновременно рисовать свои графики и на ценовом графике и в подвале. Если много расчетов запихать в один индикатор, то он будет отнимать много времени у терминала и тот будет ругаться и требовать переписать индикатор, т.к. время обработки каждого индикатора ограничено в терминале.
> А если разделено на несколько индикаторов, то для каждого отдельно выделяется терминальное время и все счастливы.:cool:

хорошо что я об этом не знаю, а то бы мой индюк не работал бы.:ROFLMAO:
Бывают лишь не состыковки в коде из за функционала  и стиля написания по этому и приходится искать подходящие синтексисы  и т.д. что бы совместить два и более индюка в один.

## dobi82 — 2025-10-07 11:22

> Цитата (vladradon):
> Один индикатор не может одновременно рисовать свои графики и на ценовом графике и в подвале. Если много расчетов запихать в один индикатор, то он будет отнимать много времени у терминала и тот будет ругаться и требовать переписать индикатор, т.к. время обработки каждого индикатора ограничено в терминале.
> А если разделено на несколько индикаторов, то для каждого отдельно выделяется терминальное время и все счастливы.:cool:

Вот тебе пример. Один индюк и в подвале и на экране одновременно, не нужно говорить что такое не возможно.

## vladradon — 2025-10-07 12:43

> Цитата (dobi82):
> Вот тебе пример. Один индюк и в подвале и на экране одновременно, не нужно говорить что такое не возможно.

Такого нет в принципе! Скинь посмотреть.))) У каждого индюка есть только один выбор - рисовать свой график или на ценовом, или в подвале. Стрелки и т.п. не учитываем - это графические элементы, а не буферный график индикатора.
Есть возможность создавать окно из индикатора с помощью спец функций, но это утроение загрузки на процессор как минимум.
В каждом индикаторе есть только 1 выбор в строке типа #property indicator_chart_window или #property indicator_separate_window и только в выбранном  варианте он будет рисовать буферные расчеты!
Не нужно говорить что возможно и что нет - есть разные изначальные расчеты и речь идет об индикаторах с буферным расчетом. Все остальные  - тормоз для терминала. Хотя и в последних билдах старые разработки стали десятикратно тормозить безо всякой графики...

## vladradon — 2025-10-07 13:26

> Цитата (dobi82):
> Вот тебе пример. Один индюк и в подвале и на экране одновременно, не нужно говорить что такое не возможно.

Скрин со всех сторон обрубленный и сколько там индюков не видно. Не видно не тест ли это, где запускается 1 индюк, который запускает другой. Слишком много мути в твоем скрине!

## dobi82 — 2025-10-07 14:16

> Цитата (vladradon):
> Скрин со всех сторон обрубленный и сколько там индюков не видно. Не видно не тест ли это, где запускается 1 индюк, который запускает другой. Слишком много мути в твоем скрине!

ну ты даёшь.  Когда устанавливаешь два индюка  один на основном а другой в подвале тогда показывает-окно1 и окно2 и т.д., а здесь только окно1. :ROFLMAO:  :ROFLMAO:  :ROFLMAO:
И да, я такой ерундой не занимаюсь которое ты озвучил.

## dobi82 — 2025-10-07 14:27

Вот теперь два индюка установлено в подвале, а отображается и там и там как три и ничего не обрезано.
Ладно мучать не буде всё просто, индикатор который должен отображаться в основном окне делаешь через графическое отображение, а подвал через буфер и не будет ничего конфликтовать, а вы пытаетесь нагрузить буфера тем что не совместимо. Вот и весь секрет. :cool:

---

Следующая страница: https://forexsystemru.com/threads/65289/page-478
