Спасибо. Но в этом случае ( в вашем коде) одно и то же ДЕЙСТВИЕ прописано в коде 2 раза. А мне бы сделать так что бы ДЕЙСТВИЕ было прописано только 1 раз..... если конечно язык позволяет. А Ваш вариант я привел в своем примере, только без else
Спасибо. Но в этом случае ( в вашем коде) одно и то же ДЕЙСТВИЕ прописано в коде 2 раза. А мне бы сделать так что бы ДЕЙСТВИЕ было прописано только 1 раз..... если конечно язык позволяет. А Ваш вариант я привел в своем примере, только без else
Похоже Вы не понимаете как работает "else"
"else" не вызывает никаких дополнительных действий, а выдает результат если "if" не выдал.
Я с хедж счетами работал только в далеком 2015 году на мт4, в МТ5 тут понадобилось сделать универсальность и возникла проблема с тейк профитами.
Смотрите логика:
Открываем Бай Селл
Робот подхватывает позиции, сомотрит что на них нет ТП и выставляет им ТП.
Если открыть еще один бай, по логике робот смотрит что появилось 2 позиции одного направления, он заходит во вторую функцию, сравнивает цены текущего ТП и нового, если они отличаются, он меняет Цену на второй ТП.
Но вот тут ошибка сыпаться начинает, если открыть вторую позицию на сел, то метод почему то берет цену тейка от направления бай и пытается ее модифицировать для направления сел на новый уровень, но так как этот уровень находится ниже цены открытия позиций - вылетает ошибка.
Всем добрый день. Пытаюсь написать очередной Грааль 😋🤓😎😁😁😁😉 и для этого мне нужен стоп по максимуму и минимуму 5 свечей. Для сел ордеров получается по макс 5 свечей, а для бай ордеров по мин 5 свечей. Но мне нужна не просто цена макс или лоу за 5 свечей, а разница в пунктах от текущей свечи до уровня хай, лоу 5 свечей. Написал вот такие функции для этого дела.
//--ФУНКЦИЯ РАСЧЁТА МИНИМУМА ПОСЛЕДНИХ 5 СВЕЧЕЙ НАЧАЛО-----------------------------------------------------------------------------------------------+double f___CalculateStopLoss_dl9_buy()
{
// Переменная для хранения минимума последних 5 свечейdouble minLow = Low[0]; // Изначально считаем минимумом Low текущей свечи// Цикл для нахождения минимума за последние 5 свечейfor (int i = 1; i < 5; i++)
{
if (Low[i] < minLow) // Если Low предыдущей свечи меньше текущего minLow, обновляем его
{
minLow = Low[i];
}
}
// Текущая цена открытия (Bid)double currentPrice = Bid;
// Разница между текущей ценой и минимумом последних 5 свечейdouble stopSize = currentPrice - minLow;
// Переводим разницу в пунктыdouble stopSizePoints = stopSize / MarketInfo(Symbol(), MODE_POINT);
// Возвращаем размер стопа в пунктахreturn stopSizePoints;
}
//-----ФУНКЦИЯ РАСЧЁТА МИНИМУМА ПОСЛЕДНИХ 5 СВЕЧЕЙ КОНЕЦ --------------------------------------------------------------------------------------------+//--ФУНКЦИЯ РАСЧЁТА МАКСИМУМА ПОСЛЕДНИХ 5 СВЕЧЕЙ НАЧАЛО-----------------------------------------------------------------------------------------------+double f___CalculateStopLoss_dl9_sell()
{
// Переменная для хранения максимума последних 5 свечейdouble maxHigh = High[0]; // Изначально считаем максимумом High текущей свечи// Цикл для нахождения максимума за последние 5 свечейfor (int i = 1; i < 5; i++)
{
if (High[i] > maxHigh) // Если High предыдущей свечи больше текущего maxHigh, обновляем его
{
maxHigh = High[i];
}
}
// Текущая цена (Bid)double currentPrice = Bid;
// Разница между максимумом последних 5 свечей и текущей ценойdouble stopSize = maxHigh - currentPrice;
// Переводим разницу в пунктыdouble stopSizePoints = stopSize / MarketInfo(Symbol(), MODE_POINT);
// Возвращаем размер стопа в пунктахreturn stopSizePoints;
}
//-----ФУНКЦИЯ РАСЧЁТА МАКСИМУМА ПОСЛЕДНИХ 5 СВЕЧЕЙ КОНЕЦ --------------------------------------------------------------------------------------------+
Размер в пунктах вроде должен нормально высчитываться, но при присвоении значений которые эти функции вернут, в переменную сл и передачу переменной сл в функцию открытия ордеров у меня в тесте вылетает инвалид стоп лос и ошибка OrderSend error 4107
Что я не так пишу и как завести мой Грааль, подскажите пожалуйста? P/Sесли в функцию открытия ордеров я передам просто размер стопа то всё норм работает…
Вот код функции открытия бай и селл ордера.
//---ФУНКЦИЯ ОТКРЫТИЯ РЫНОЧНОГО БАЙ ОРДЕРА НАЧАЛО----------------------------------------------------------------------------------------------+int f__open_market_buy(double param_lot, // ЛОТ ОРДЕРАint param_slipage, double param_sl, //СТОП ЛОС ОРДЕРА double param_tp, // ТЕЙК ПРОФИТ ОРДЕРАstring param_order_comment, // КОМЕНТАРИЙ ОРДЕРАint param_magik_number ) // МАГИЧЕСКИЙ НОМЕР ОРДЕРА
{
int tiket_order= 0;// ТИКЕТ ОТКРЫТОГО ОРДЕРА
tiket_order= OrderSend(Symbol(), OP_BUY, param_lot, Ask, param_slipage, Ask-param_sl, Ask+param_tp, param_order_comment, param_magik_number, 0, clrGreen);
return(tiket_order);
}
//------ФУНКЦИЯ ОТКРЫТИЯ РЫНОЧНОГО БАЙ ОРДЕРА КОНЕЦ-------------------------------------------------------------------------------------------+
Всем добрый день. Пытаюсь написать очередной Грааль 😋🤓😎😁😁😁😉 и для этого мне нужен стоп по максимуму и минимуму 5 свечей. Для сел ордеров получается по макс 5 свечей, а для бай ордеров по мин 5 свечей. Но мне нужна не просто цена макс или лоу за 5 свечей, а разница в пунктах от текущей свечи до уровня хай, лоу 5 свечей. Написал вот такие функции для этого дела.
Размер в пунктах вроде должен нормально высчитываться, но при присвоении значений которые эти функции вернут, в переменную сл и передачу переменной сл в функцию открытия ордеров у меня в тесте вылетает инвалид стоп лос и ошибка OrderSend error 4107
Что я не так пишу и как завести мой Грааль, подскажите пожалуйста? P/Sесли в функцию открытия ордеров я передам просто размер стопа то всё норм работает…
Вот код функции открытия бай и селл ордера.
Что я не так делаю и как это добро завести?
Можно же вот так найти максимум и минимум
int Glubina = 5; // находим максимум и минимум за заданное кол-во баровdouble Hi_price = 0.0;
double Lo_price = 0.0;
Hi_price = NormalizeDouble(iHigh(Symbol(),PERIOD_M1,iHighest(Symbol(),PERIOD_M1,MODE_HIGH,Glubina,1)), _Digits);
Lo_price = NormalizeDouble(iLow (Symbol(),PERIOD_M1,iLowest (Symbol(),PERIOD_M1,MODE_LOW ,Glubina,1)), _Digits);
Спасибо. Но в этом случае ( в вашем коде) одно и то же ДЕЙСТВИЕ прописано в коде 2 раза. А мне бы сделать так что бы ДЕЙСТВИЕ было прописано только 1 раз..... если конечно язык позволяет. А Ваш вариант я привел в своем примере, только без else
Спасибо. Но в этом случае ( в вашем коде) одно и то же ДЕЙСТВИЕ прописано в коде 2 раза. А мне бы сделать так что бы ДЕЙСТВИЕ было прописано только 1 раз..... если конечно язык позволяет. А Ваш вариант я привел в своем примере, только без else
Похоже Вы не понимаете как работает "else"
"else" не вызывает никаких дополнительных действий, а выдает результат если "if" не выдал.
У меня вопрос про ArraySort.
Нулевое измерение - это первый (нулевой) столбец? Что такое вообще измерение у массива?
Одномерный массив: array[ ];
Двумерный массив: array[ ][ ];
Трёхмерный массив array[ ][ ][ ];
Первое, второе, третье измерения помечены цветом.
Про нулевое измерение не слышал :)
ЗЫ. И зачем было удалять...
Подумал что тема не та
Да, действительно. Сюда перенёс.
Что такое измерение?
Ребята требуется помощь.
Я с хедж счетами работал только в далеком 2015 году на мт4, в МТ5 тут понадобилось сделать универсальность и возникла проблема с тейк профитами.
Смотрите логика:
Открываем Бай Селл
Робот подхватывает позиции, сомотрит что на них нет ТП и выставляет им ТП.
Если открыть еще один бай, по логике робот смотрит что появилось 2 позиции одного направления, он заходит во вторую функцию, сравнивает цены текущего ТП и нового, если они отличаются, он меняет Цену на второй ТП.
Но вот тут ошибка сыпаться начинает, если открыть вторую позицию на сел, то метод почему то берет цену тейка от направления бай и пытается ее модифицировать для направления сел на новый уровень, но так как этот уровень находится ниже цены открытия позиций - вылетает ошибка.
Почему он берет тейк не своего направления понять не могу
Может уже установленные тейки нужно каким то другим образом выявлять и т.д. ?
Всем добрый день. Пытаюсь написать очередной Грааль 😋🤓😎😁😁😁😉 и для этого мне нужен стоп по максимуму и минимуму 5 свечей. Для сел ордеров получается по макс 5 свечей, а для бай ордеров по мин 5 свечей. Но мне нужна не просто цена макс или лоу за 5 свечей, а разница в пунктах от текущей свечи до уровня хай, лоу 5 свечей. Написал вот такие функции для этого дела.
Размер в пунктах вроде должен нормально высчитываться, но при присвоении значений которые эти функции вернут, в переменную сл и передачу переменной сл в функцию открытия ордеров у меня в тесте вылетает инвалид стоп лос и ошибка OrderSend error 4107
Что я не так пишу и как завести мой Грааль, подскажите пожалуйста? P/S если в функцию открытия ордеров я передам просто размер стопа то всё норм работает…
Вот код функции открытия бай и селл ордера.
Что я не так делаю и как это добро завести?
/ MarketInfo(Symbol(), MODE_POINT)
Всем добрый день. Пытаюсь написать очередной Грааль 😋🤓😎😁😁😁😉 и для этого мне нужен стоп по максимуму и минимуму 5 свечей. Для сел ордеров получается по макс 5 свечей, а для бай ордеров по мин 5 свечей. Но мне нужна не просто цена макс или лоу за 5 свечей, а разница в пунктах от текущей свечи до уровня хай, лоу 5 свечей. Написал вот такие функции для этого дела.
Размер в пунктах вроде должен нормально высчитываться, но при присвоении значений которые эти функции вернут, в переменную сл и передачу переменной сл в функцию открытия ордеров у меня в тесте вылетает инвалид стоп лос и ошибка OrderSend error 4107
Что я не так пишу и как завести мой Грааль, подскажите пожалуйста? P/S если в функцию открытия ордеров я передам просто размер стопа то всё норм работает…
Вот код функции открытия бай и селл ордера.
Что я не так делаю и как это добро завести?
Можно же вот так найти максимум и минимум