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

Ugar

Гуру форума
Подскажите пожалуйста, как заставить советника работать на счете ECN (Альпари). На NDD и на стандарте у других дц работает без проблем.
Нужно сделать так что бы ордера открывались без стопов и тейков, а стопы и тейки добавлять потом, модификацией ордера.
 

hoz

Активный участник
При выводе на печать параметра OBJPROP_ANGLE всегда выдаётся следующее не зависимо от реального угла:

PHP:
2012.10.09 17:44:53	AngleByMa AUDJPY.5,M5: OBJPROP_ANGLE = 13


Я не верно написал, исправить уже нет возможности. Вот что я выводил вообще на печать. и вообще тот участок кода:

PHP:
    ObjectCreate("trendLine",OBJ_TREND,0,iTime(Symbol(),maTF,shiftBarsBack2),point2OfMa,iTime(Symbol(),maTF,shiftBarsBack1),point1OfMa);
   // ObjectCreate("hLne",OBJ_HLINE,point2OfMa,0);
    ObjectSet("trendLine",OBJPROP_COLOR,Black);
    ObjectSet("trendLine",OBJPROP_WIDTH,4);
    ObjectSet("trendLine",OBJPROP_RAY,false);
    WindowRedraw();
    double angle = ObjectGet("trendLine",OBJPROP_ANGLE);
    Print("angle: ",angle);


На выходе постоянно 0:


Код:
2012.10.10 11:43:03	AngleByMa AUDJPY.5,M5: angle: 0
2012.10.10 11:43:03	AngleByMa AUDJPY.5,M5: initialized


Почему не возвращается значение угла?
 

hoz

Активный участник
хелп надо внимательнее читать...
это свойство только для объекта OBJ_TRENDBYANGLE

Так я уже пробывал тоже. Если в коде:
PHP:
ObjectCreate("trendLine",OBJ_TRENDBYANGLE,0,iTime(Symbol(),maTF,shiftBarsBack2),pointOfMaLast,iTime(Symbol(),maTF,shiftBarsBack1),pointOfMaCurr);


Заменить OBJ_TREND на OBJ_TRENDBYANGLE, то отрисовывается вообще какая-то чушь, почти горизонтально всегда. И как ни крути, ничего не меняется.







В журнале тоже постоянно нули, как видно на графике. Координаты 2 там привязаны к машке, а на графике они вообще непонятно где...
 

3Nymous

Активный участник
Заменить OBJ_TREND на OBJ_TRENDBYANGLE, то отрисовывается вообще какая-то чушь, почти горизонтально всегда. И как ни крути, ничего не меняется.
теперь читай с какими параметрами создавать OBJ_TRENDBYANGLE...

еще подсказка...
угол, вещь относительная, если линия привязана к двум точкам - поменял масштаб, и угол изменился )
а вообще, вспоминай геометрию, школьный курс "как найти угол прямоугольного треугольника"
 

hoz

Активный участник
теперь читай с какими параметрами создавать OBJ_TRENDBYANGLE...

Читал, и не один раз читал..



OBJ_TRENDBYANGLE Трендовая линия по углу. Использует 2 координаты, либо первую координату и угол. Для установки угла линии (свойство OBJPROP_ANGLE) используется функция ObjectSet()

Первый вариант построения по 2 координатам. Я так и сделал. Вот последний вариант:

PHP:
 ObjectCreate("trendLine",OBJ_TRENDBYANGLE,0,Time[shiftBarsBack2],pointOfMaLast,Time[shiftBarsBack1],pointOfMaCurr);


Что не так? Всё по документации... Ведь там сказано: Трендовая линия по углу. Использует 2 координаты, либо первую координату и угол. Я выбрал первый вариант по 2 координатам:Использует 2 координаты

а вообще, вспоминай геометрию, школьный курс "как найти угол прямоугольного треугольника"


Об этом я тоже думал. Через тот же тангенс. Но для этого нам нужно знать катет и гипотенузу. А это уже откуда взять? Да и в чём их измерить? Ведь это величины разного происхождения.. цена и время.


угол, вещь относительная, если линия привязана к двум точкам - поменял масштаб, и угол изменился )


Мне это не важно..
 

3Nymous

Активный участник
Я выбрал первый вариант по 2 координатам:Использует 2 координаты
используй ObjectSet...
но OBJPROP_ANGLE сможешь прочитать только если сам туда чего-нить запишешь ;)

Но для этого нам нужно знать катет и гипотенузу. А это уже откуда взять? Да и в чём их измерить? Ведь это величины разного происхождения.. цена и время.
прояви смекалку, придумай как привести оба значения в одну систему координат, тем более тебе не критична точность вычисления угла... попробуй привязаться к пикселям, например... я сам никогда этим не озадачивался...

имхо, проблема у тебя с доками потому что хелпы пишут программисты и для программистов ))
т.е. читай и понимай как программист... привыкай, а не возмущайся... и ищи решения... постоянный поиск решений - это и есть работа программиста...
 

hoz

Активный участник
В общем-то это даже и хорошо, что такие как ты 3Nymous себя так ведут. Я долбался 3 дня и получил бесценный опыт. Всё реализовал, и даже больше чем ожидал.
Хотя знакомые программисты мне утверждали, что я не прав, и что такого не сделать. И т.д. и т.п.
Но у меня нет рамок, я открыт новому, в отличие от тех кто привык верить кому-то на слово. И знаю, что только так можно достичь любой цели. Всё, спасибо за непомощ:rolf:
 

gold_traid

Новичок форума
Доброго времени суток господа программисты!Подскажите пожалуйста как заставить советника открывать одновреммено не одну позицию ну а скажем 5-7 то сть получается так индикаторы дают сигнал на покупку(продажу) и вот тут нужно чтоб было 5-7 открытых ползиций
 

eevviill

Заблокирован
Доброго времени суток господа программисты!Подскажите пожалуйста как заставить советника открывать одновреммено не одну позицию ну а скажем 5-7 то сть получается так индикаторы дают сигнал на покупку(продажу) и вот тут нужно чтоб было 5-7 открытых ползиций
1)Перед каждым открытием позиции подсчитывать количество открытых ордеров и ввести условие чтобы открывалось не больше Х ордеров.

2)Через функцию for
После каждой успешной итерации(открытие ордера) добавлять в переменную Х еденицу. Цыкл заканчивать тогда когда Х станет = ограниченому количеству ордеров.
 

gold_traid

Новичок форума
1)Перед каждым открытием позиции подсчитывать количество открытых ордеров и ввести условие чтобы открывалось не больше Х ордеров.

2)Через функцию for
После каждой успешной итерации(открытие ордера) добавлять в переменную Х еденицу. Цыкл заканчивать тогда когда Х станет = ограниченому количеству ордеров.
я так понимаю вот тут надо
PHP:
for (int l_pos_308 = 0; l_pos_308 < l_ord_total_4; l_pos_308++)
 

joseph

Интересующийся
нужна помощь

Подскажите,плиз, как вынести в некие переменные точки A,B,C ,чтобы потом с ними можно было работать .Точки A & B это пересечение свечек с линией , а С это максимум свечей между А и В .Причем между А и В должна быть хотябы одна свеча и она должна не касаться линии.
В учебнике про это не нашел. Или может есть советник с подобными приемами ?
 

Вложения

  • 1.gif
    1.gif
    12,6 КБ · Просмотры: 22

Ugar

Гуру форума
Подскажите,плиз, как вынести в некие переменные точки A,B,C ,чтобы потом с ними можно было работать .Точки A & B это пересечение свечек с линией , а С это максимум свечей между А и В .Причем между А и В должна быть хотябы одна свеча и она должна не касаться линии.
В учебнике про это не нашел. Или может есть советник с подобными приемами ?
Не всё есть в учебнике. Так и должно быть. Пора переходить на справочник.
_http://docs.mql4.com/ru/objects/ObjectGet
Доставай время,
_http://docs.mql4.com/ru/series/iBarShift
вычисляй из него № бара.
Доставай цену линии на этом баре. Проверяй пробил ли бар линию. Если нет переходи к следующему бару...
Так найдёшь все бары которые пробивают линию.
_http://docs.mql4.com/ru/series/iHighest
Поможет найти С
 
Последнее редактирование:

Forex-man

Заблокирован
Привет всем.Подскажите как отвязывать советник от dll,он уже декомпильнутый,но его нужно так сказать вылечить.Как это делается?
 

hoz

Активный участник
Привет всем.Подскажите как отвязывать советник от dll,он уже декомпильнутый,но его нужно так сказать вылечить.Как это делается?

Всё что есть в dll перенести в совок и из совка убрать упоминание про dll по названию dll. Суть такая..
 

xsyr

Местный житель
Как сделать так чтобы лот всегда соответствовал плечу 1:300, например при десяти долларах на депозите объем 0,03; при 7 долларах - 0,02 и т.д., или так вообще нельзя сделать?
 
Последнее редактирование:

Ugar

Гуру форума
Как сделать так чтобы лот всегда соответствовал плечу 1:300, например при десяти долларах на депозите объем 0,03; при 7 долларах - 0,02 и т.д., или так вообще нельзя сделать?
Напиши на бумажке формулу по которой считаешь лот, потом напиши всё то же самое в языке программирования. Не забудь нормировать полученный лот, под минимальный, максимальный и шаг изменения.
Но это пролезет только если ДЦ даёт болшее кредитное плечё, иначе при открытии ордера получишь сообщение об ошибке, что бабла на счёте не хватает.
 

hoz

Активный участник
Вот функция поиска своих ордеров, которая мне попалась когда я изучать какнаписать один эксперт:

PHP:
void FindOrders()
{
// - 1 - == Инициализация переменных перед поиском ======================================
   int total = OrdersTotal() - 1;
   g_type = -1;                                    // На текущий момент у нас нет позиций
// - 1 - == Окончание блока =============================================================
 
// - 2 - == Непосредственно поиск =======================================================
   for (int i = total; i >= 0; i--)                // Используется весь список ордеров
      if (OrderSelect(i, SELECT_BY_POS))           // Убедимся, что ордер выбран
         if (MathFloor(OrderMagicNumber()) == i_magicNumber &&// Ордер открыт
             OrderSymbol() == Symbol())            // ..экспертом, который прикреплен к..
         {                                         // ..текущей паре
            g_ticket = OrderTicket();              // Запишем данные ордера
            g_type = OrderType();
         } 
// - 2 - == Окончание блока =============================================================
}

Для меня не совсем понятен участок:

PHP:
 if (MathFloor(OrderMagicNumber()) == i_magicNumber

Зачем использовать функцию MathFloor для мейджика, если мейджик прописан во входных данных и он целый? Какой смысл его "округлять", если он и так целый? Есть ли тут вообще смысл?
 

Айбек

Активный участник
Всем привет! Кто нить подскажите функцию удаления отложенного ордера при срабатывании противоположного) Заранее спасибо)
 
Верх