### Написание Индикатора на MQL4 и MQL5
Создание индикаторов в MQL4 и MQL5 имеет свои особенности, но общие принципы одинаковы. Пример базового индикатора скользящей средней (Moving Average) для обоих языков:
### Пример MQL4:
```mql4
//+------------------------------------------------------------------+
//| MyIndicator.mq4 |
//| Copyright 2023, MetaQuotes Software Corp. |
//|
https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property strict
//--- input parameters
input int InpPeriod = 14; // Indicator period
//--- indicator buffers
double Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// Indicator buffers mapping
SetIndexBuffer(0, Buffer);
// Name for DataWindow and indicator subwindow label
IndicatorShortName("MyIndicator (" + IntegerToString(InpPeriod) + ")");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // size of the price[] arrays
const int prev_calculated, // bars handled with a previous call
const datetime& time[],
const double& open[],
const double& high[],
const double& low[],
const double& close[],
const long& tick_volume[],
const long& volume[],
const int& spread[])
{
//--- check for bars count
if(rates_total < InpPeriod)
return(0);
//--- backward calculation
for(int i = rates_total - 1; i >= 0; i--)
{
Buffer
= iMA(NULL, 0, InpPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
}
return(rates_total);
}
//+------------------------------------------------------------------+
```
### Пример MQL5:
```mql5
//+------------------------------------------------------------------+
//| MyIndicator.mq5 |
//| Copyright 2023, MetaQuotes Software Corp. |
//| https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property strict
//--- input parameters
input int InpPeriod = 14; // Indicator period
//--- indicator buffers
double Buffer[];
//--- handle of the Moving Average
int handle_ma;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// Indicator buffers mapping
SetIndexBuffer(0, Buffer);
// Name for DataWindow and indicator subwindow label
IndicatorShortName("MyIndicator (" + IntegerToString(InpPeriod) + ")");
// Create a handle for the moving average
handle_ma = iMA(_Symbol, _Period, InpPeriod, 0, MODE_SMA, PRICE_CLOSE);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // size of the price[] arrays
const int prev_calculated, // bars handled with a previous call
const datetime& time[],
const double& open[],
const double& high[],
const double& low[],
const double& close[],
const long& tick_volume[],
const long& volume[],
const int& spread[])
{
//--- check for bars count
if(rates_total < InpPeriod)
return(0);
//--- calculate values
CopyBuffer(handle_ma, 0, 0, rates_total, Buffer);
return(rates_total);
}
//+------------------------------------------------------------------+
```
### Основные отличия:
1. **Создание индикатора:**
- В MQL5 используется функция `CopyBuffer` для получения значений индикатора.
- В MQL4 вычисление выполняется напрямую в цикле.
2. **Подключение индикаторных буферов:**
- В MQL5 используется функция `SetIndexBuffer`.
- В MQL4 применяется аналогичная функция, но логика может различаться.
### Перевод индикатора с MQL4 на MQL5:
1. **Замени функции, специфичные для MQL4, на их аналоги в MQL5.**
2. **Используй `CopyBuffer` для получения данных из внутреннего индикатора.**
3. **Проверяй допустимость параметров (перепроверь, чтобы индикатор работал корректно).**
Если тебе нужна помощь с конкретным кодом, не стесняйся задать дополнительные вопросы или прислать части твоего кода.
Отправлено спустя 4 минуты 19 секунд:
Vizavi писал(а): Начало беседы из 4 сообщений (691 токенов из 2048 использовано)Привет! Я действительно отвечаю быстро, но только на текстовые сообщения. Просматривать или контролировать твои действия я не могу — просто тут, чтобы помочь!
Что касается приготовления индюка, вот простой алгоритм:
► Показать
### Ингредиенты:
- Индюк (целиком)
- Соль
- Перец
- Чеснок
- Лук
- Оливковое масло или сливочное масло
- Травы (например, розмарин, тимьян, шалфей)
### Инструкция:
1. **Подготовка:**
- Разогрей духовку до 180°C.
- Промой индюка и обсуши его бумажными полотенцами.
2. **Приготовление маринада:**
- В небольшой миске смешай соль, перец, измельчённый чеснок и травы.
- Добавь немного масла (оливкового или растопленного сливочного) и хорошенько перемешай.
3. **Нанесение маринада:**
- Аккуратно приподними кожу индюка и втирай маринад непосредственно под кожу. Это обеспечит более насыщенный вкус.
- Остальной маринад распределите по всей поверхности индюка.
4. **Запекание:**
- Помести индюка в форму для запекания грудкой вверх.
- Если используешь лук, нарежь его кольцами и положи вокруг индюка – он придаст дополнительный аромат.
- Накрой форму фольгой и поставь в разогретую духовку.
5. **Время готовки:**
- Запекай индюка примерно 20 минут на каждый килограмм веса. Например, если у тебя индюк весом 5 кг, готовить его нужно около 1 часа 40 минут.
- За 30 минут до окончания запекания сними фольгу, чтобы индюк подрумянился.
6. **Проверка готовности:**
- Используй термометр для мяса: внутренняя температура должна достигнуть 75°C в самой толстой части грудки и 82°C в бедре.
7. **Отдых:**
- Дай индюку отдохнуть 20 минут перед тем, как разрезать. Это позволит сокам равномерно распределиться по мясу.
Если у тебя есть конкретные вопросы или нужна дополнительная информация, просто дай знать!
Привет! Рад помочь с твоим индюком. Если у тебя возникли какие-то вопросы или тебе нужна дополнительная информация, не стесняйся спрашивать. Вот несколько дополнительных советов и уточнений, которые могут быть полезны:
1. **Соление:** Перед тем как запекать индюка, можно сделать сухое засаливание. Для этого надо натереть его солью и оставить в холодильнике на ночь. Это поможет мякоти стать более сочной и ароматной.
2. **Начинка:** Если хочешь, можешь нафаршировать индюка. Популярные варианты начинки включают смесь хлебных крошек, лука, сельдерея и трав. Важно помнить, что начинка увеличит время приготовления, потому что она должна быть доведена до безопасной температуры (75°C).
3. **Бульон или вино:** Для более насыщенного вкуса можно налить немного бульона или белого вина на дно формы для запекания. Это создаст пар, который поможет индюку оставаться сочным.
4. **Поливка соками:** Во время запекания каждые 30 минут поливай индюка выделяющимися соками. Это поможет сохранить его влажность и улучшит вкус корочки.
5. **Термометр:** Очень важно использовать термометр для мяса, чтобы убедиться, что индюк полностью приготовлен и безопасен для употребления. Протыкай термометром в самом толстой части грудки и бедра, избегая костей.
6. **Фольга:** Если верх индюка начинает подгорать слишком быстро, можешь накрыть его фольгой, но оставь её незакрепленной по бокам, чтобы тепло могло циркулировать.