Ответ
 
Опции темы
Старый 07.11.2011, 07:37   #1 (permalink)
Администратор
 
Аватар для chocolate
 
Регистрация: 18.06.2010
Адрес: Россия/Тольятти
Сообщений: 3,634
Репутация: 3196
chocolate chocolate chocolate chocolate chocolate chocolate chocolate chocolate chocolate chocolate chocolate
Сказал(а) спасибо: 2,954
Поблагодарили 3,141 раз(а) в 1,558 сообщениях
Поинты: 95

По умолчанию Ваши вопросы по языку MQL4


Данная тема создана для любых вопросов относительно языка программирования MQL4. Спрашиваем, отвечаем, помогаем и живем дружно.

Всем успехов.

Аналогичная тема, но для MQL5 Вопросы по MQL5

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
FAQ по форуму или ответы на все вопросы пользователей

Как вставить видео с Youtube?


Модератор - он не надзиратель, а дружественный пользователю участник. (с)

Есть вопросы по форуму? С радостью отвечу.

Биржевые линейки

Последний раз редактировалось Юлия; 08.09.2014 в 16:15.
chocolate на форуме   Ответить с цитированиемОтветить с цитированием  
3 пользователя(ей) сказали cпасибо:
avr52 (17.07.2015), eevviill (17.10.2013), vlados73 (02.07.2015)
Старый 08.11.2011, 12:49   #2 (permalink)
Прохожий
 
Аватар для Arnold100
 
Регистрация: 11.08.2011
Сообщений: 1
Репутация: 1
Arnold100
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 0
Помогите разобраться! Хочу написать индикатор (скрипт). Принцип работы такой: я строю произвольную трендовую линию от A до B, а индикатор рассчитывает сколько цена прошла в пунктах по ценовой шкале, т.е. В-А. А также сколько цена прошла по времени в барах от А до В! Может кто-нибудь подскажет с чего начать???
Arnold100 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.11.2011, 09:50   #3 (permalink)
Новичок форума
 
Аватар для andrspir
 
Регистрация: 20.01.2010
Адрес: Мценск
Сообщений: 23
Репутация: 12
andrspir
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 4 сообщениях
Поинты: 0

По умолчанию Прошу помочь примером


Есть отличная система (не мартин) при ручной торговле результат просто волшебный. Пытаюсь ее автоматизировать, но слабоват в языке.

Основа у меня готова, прошу помочь примером...
Есть переменная Lot=0.01
Как программно если предыдущая сделка закрылась по стоп-лосу выполнить Lot=Lot+0.01 ?

Советник работает потиково и уменя билеберда.
andrspir вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.11.2011, 22:12   #4 (permalink)
Активный участник
 
Аватар для Lender
 
Регистрация: 19.07.2011
Сообщений: 56
Репутация: 75
Lender
Сказал(а) спасибо: 9
Поблагодарили 74 раз(а) в 35 сообщениях
Поинты: 6
Отправить сообщение для Lender с помощью Skype™
строиш свою трендовую на графике руками,
в скрипте\индюке\сове узнаеш нужные тебе параметры своей линии
спомощью
ObjectGet( string name, int prop_id)
name - имя твоего обекта
prop_id - Идентификатор свойства объекта. Может быть любым из значений списка свойств объекта.

Пример вызова:
PHP код:
 double price1 ObjectGet("hline12"OBJPROP_PRICE1); 
в хелпе все достаточно понятно описано
Lender вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 10.11.2011, 22:24   #5 (permalink)
Активный участник
 
Аватар для Lender
 
Регистрация: 19.07.2011
Сообщений: 56
Репутация: 75
Lender
Сказал(а) спасибо: 9
Поблагодарили 74 раз(а) в 35 сообщениях
Поинты: 6
Отправить сообщение для Lender с помощью Skype™
PHP код:
     double Lots 0.01;
   
int    orders=HistoryTotal();     // history orders total
      
for(int i=orders-1;i>=0;i--)
        {
         if(
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
         if(
OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
         
//----
         
if(OrderProfit()>0) break;
         if(
OrderClosePrice() == OrderStopLoss()) { Lots += 0.01 ; }
        }
     } 
Лови, только я не проверял на работоспособность, просто выдернул с стандартного сова МувингАвераге кусок кода и изменил всего две строки...
Lender вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (17.10.2013)
Старый 11.11.2011, 06:50   #6 (permalink)
Новичок форума
 
Аватар для andrspir
 
Регистрация: 20.01.2010
Адрес: Мценск
Сообщений: 23
Репутация: 12
andrspir
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 4 сообщениях
Поинты: 0
спасибо огромное...
вроде вырисовывается очень надежная системка которая бережет нервы...
как отлажу обязательно выложу
andrspir вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 13.11.2011, 14:28   #7 (permalink)
Новичок форума
 
Аватар для fairslog
 
Регистрация: 26.03.2011
Адрес: Киев
Сообщений: 18
Репутация: 13
fairslog
Сказал(а) спасибо: 11
Поблагодарили 12 раз(а) в 8 сообщениях
Поинты: 0
Добрый день, в прграмировании новичёк, охота разобраться но времени не хватает, есть советник, хочу в него добавить трал, может ктонибудь объяснить как это правильно вписать, сам советник - декомпил.
Буду очень признателен, ещё , торговля в советнике пачкой ордеров.
fairslog вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 15.11.2011, 14:47   #8 (permalink)
Активный участник
 
Аватар для Lender
 
Регистрация: 19.07.2011
Сообщений: 56
Репутация: 75
Lender
Сказал(а) спасибо: 9
Поблагодарили 74 раз(а) в 35 сообщениях
Поинты: 6
Отправить сообщение для Lender с помощью Skype™
если в программировании не силен,то для тебя лучшим вариантом будет не дописывания трала в исходный сов а использования еще одного сова для трала в другом окне с тем же магиком, но так в тестере не поганять..
совы для трала ордеров и нете на любой вкус, цвет и оттенок найти можно

если же не жалко 5-13 можно обратится к платному программисту в разделе работа, или за бесплатно с форума какого то прогера подправить попроси...
Lender вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 15.11.2011, 14:56   #9 (permalink)
Новичок форума
 
Аватар для fairslog
 
Регистрация: 26.03.2011
Адрес: Киев
Сообщений: 18
Репутация: 13
fairslog
Сказал(а) спасибо: 11
Поблагодарили 12 раз(а) в 8 сообщениях
Поинты: 0
Спасибо за рекомендации, не святые горшки лепят, так и тут, просто интересно разобраться как правильно это сделать, когдато все програмисты с чего то начинали и то-же также спрашивали, мне вузы поздно оканчивать, а вот понять чтоб для себя это делать хотя бы интересно.....
Так что вопрос остаётся актуальным.
fairslog вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 16.11.2011, 12:00   #10 (permalink)
Новичок форума
 
Аватар для 271863768
 
Регистрация: 09.07.2011
Сообщений: 109
Репутация: 10
271863768
Сказал(а) спасибо: 13
Поблагодарили 9 раз(а) в 7 сообщениях
Поинты: 16
Отправить сообщение для 271863768 с помощью Skype™
Помогите пожалуйста прикрутить мартышку и трал к этому советнику, торгую на 5 минутках и моя стратегия требует быстрой установки ордеров, в случае СЛ удвоения и трала...очень надо спасибо заранее
Вложения:
Тип файла: mq4 OCO_Visual.mq4 (6.7 Кб, 67 просмотров)
271863768 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 16.11.2011, 22:37   #11 (permalink)
Активный участник
 
Аватар для Lender
 
Регистрация: 19.07.2011
Сообщений: 56
Репутация: 75
Lender
Сказал(а) спасибо: 9
Поблагодарили 74 раз(а) в 35 сообщениях
Поинты: 6
Отправить сообщение для Lender с помощью Skype™
Сообщение от fairslog Посмотреть сообщение
Спасибо за рекомендации, не святые горшки лепят, так и тут, просто интересно разобраться как правильно это сделать, когдато все програмисты с чего то начинали и то-же также спрашивали, мне вузы поздно оканчивать, а вот понять чтоб для себя это делать хотя бы интересно.....
Так что вопрос остаётся актуальным.
если хочешь изучить мкл, то начинай с азов: типы переменных(представление данных), условные операторы, циклы, функции без параметров и с ими, если это знать то мкл4 с его хелпом со стандартным функциями дальше изучить труда не составит, так как хелп там ну оочень тяжело не понять

для объектного-ориентированного языка лесенка возможно будет чуток иначе

Сообщение от 271863768 Посмотреть сообщение
Помогите пожалуйста прикрутить мартышку и трал к этому советнику, торгую на 5 минутках и моя стратегия требует быстрой установки ордеров, в случае СЛ удвоения и трала...очень надо спасибо заранее
в разделе "работа" на этом форуме тебе охотно помогут, там и моя ветка есть

Последний раз редактировалось Lender; 16.11.2011 в 22:40.
Lender вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 17.11.2011, 12:34   #12 (permalink)
Новичок форума
 
Аватар для 271863768
 
Регистрация: 09.07.2011
Сообщений: 109
Репутация: 10
271863768
Сказал(а) спасибо: 13
Поблагодарили 9 раз(а) в 7 сообщениях
Поинты: 16
Отправить сообщение для 271863768 с помощью Skype™
Подскажите пожалуйста как реализовать отложенный ордер на расстоянии от МА для 5 знака

OrderSend(Symbol(),OP_BUYSTOP,0.1,ma+Dist_,NULL,NU LL,Blue);
постоянно выскакивает ошибка 4107 хотя через Алерт показывает нужную цену на которую я бы хотел поставить отложку

Последний раз редактировалось 271863768; 17.11.2011 в 12:40.
271863768 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 17.11.2011, 23:32   #13 (permalink)
Активный участник
 
Аватар для Lender
 
Регистрация: 19.07.2011
Сообщений: 56
Репутация: 75
Lender
Сказал(а) спасибо: 9
Поблагодарили 74 раз(а) в 35 сообщениях
Поинты: 6
Отправить сообщение для Lender с помощью Skype™
Сообщение от 271863768 Посмотреть сообщение
Подскажите пожалуйста как реализовать отложенный ордер на расстоянии от МА для 5 знака

OrderSend(Symbol(),OP_BUYSTOP,0.1,ma+Dist_,NULL,NU LL,Blue);
постоянно выскакивает ошибка 4107 хотя через Алерт показывает нужную цену на которую я бы хотел поставить отложку
ERR_INVALID_PRICE_PARAM 4107 Неправильный параметр цены для торговой функции
гугл и хелп в помощь

перед тем как подавать цену в OrderSend ее нужно нормализировать(привести к нужному кол-ву знаков за запетой)
PHP код:
price NormalizeDoublema+Dist_ Digits);
OrderSend(Symbol(),OP_BUYSTOP,0.1price,NULL,NULL,Blue); 
а в алерте все виглядело хорошо скорее всего из-за того что в параметер цену ты передавал как double а не string

в хелпе все написано

void Alert( ...)
Отображает диалоговое окно, содержащие пользовательские данные. Параметры могут быть любого типа. Количество параметров не может превышать 64.

Массивы нельзя передавать в функцию Alert(). Массивы должны выводиться поэлементно.

Данные типа double выводятся с 4 десятичными цифрами после точки. Для вывода чисел с большей точностью используйте функцию DoubleToStr().
Данные типы bool, datetime и color будут выведены как числа.
Чтобы вывести данные типа datetime в виде строки, необходимо использовать функцию TimeToStr().

Последний раз редактировалось Lender; 17.11.2011 в 23:38.
Lender вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 22.11.2011, 10:19   #14 (permalink)
Новичок форума
 
Аватар для 271863768
 
Регистрация: 09.07.2011
Сообщений: 109
Репутация: 10
271863768
Сказал(а) спасибо: 13
Поблагодарили 9 раз(а) в 7 сообщениях
Поинты: 16
Отправить сообщение для 271863768 с помощью Skype™
Прошу меня извинить :-[ ну никак не могу понять как реализовать функцию подсчета прибыли или убытка закрытого ордера или суммы ордеров
271863768 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 22.11.2011, 15:30   #15 (permalink)
Активный участник
 
Аватар для Lender
 
Регистрация: 19.07.2011
Сообщений: 56
Репутация: 75
Lender
Сказал(а) спасибо: 9
Поблагодарили 74 раз(а) в 35 сообщениях
Поинты: 6
Отправить сообщение для Lender с помощью Skype™
Сообщение от 271863768 Посмотреть сообщение
Прошу меня извинить :-[ ну никак не могу понять как реализовать функцию подсчета прибыли или убытка закрытого ордера или суммы ордеров
схожий выше есть примемр:
PHP код:

     double Lots 
0.01;
   
int    orders=HistoryTotal();     // history orders total
      
for(int i=orders-1;i>=0;i--)
        {
         if(
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
         if(
OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
         
//----
         
if(OrderProfit()>0) break;
         if(
OrderClosePrice() == OrderStopLoss()) { Lots += 0.01 ; }
        }
     } 
чуточку его переделываем, и получаем профит последнего закрытого ордера:
PHP код:

     double profit 
0;
     
bool flag set_trofit false;
   
int    orders=HistoryTotal();     // history orders total
      
for(int i=orders-1;i>=0;i--)
        {
         if(
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
           if(
OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;       
           {
profit OrderProfit(); set_trofit true; break;}
        }
     } 
пслалось прям тут, на правильность не проверял, что нужно еще сам допишешь

Последний раз редактировалось Lender; 22.11.2011 в 15:33.
Lender вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (17.10.2013)
Старый 22.11.2011, 20:39   #16 (permalink)
Новичок форума
 
Аватар для max020780
 
Регистрация: 22.12.2009
Сообщений: 44
Репутация: 11
max020780
Сказал(а) спасибо: 6
Поблагодарили 12 раз(а) в 7 сообщениях
Поинты: 30
помогите пожалуйста разобраться как сделать так чтобы в этом коде
int start()
{

int P1= Period1 ;
int P2= Period2 ;
int P3= Period3 ;

double L_4=iCustom(NULL,PERIOD_H1,"volna",P1,P2,P3,4,0);
double L_5=iCustom(NULL,PERIOD_H1,"volna",P1,P2,P3,5,0);



if (L_4<L_5 ) {

Comment("Работаем на SELL");

и открывался ордер на SELL каждом новом баре
}

if (L_4>L_5 ){
Comment("Работаем на BUY");

А при выполнении этого условия открывался ордер на BUY тоже на каждом новом баре
}

}


А то у меня получается только либо открывается только один ордер как только условие выполнилось либо вообще на каждом тике открывает
max020780 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 02.12.2011, 11:38   #17 (permalink)
Прохожий
 
Аватар для Влад Рус
 
Регистрация: 14.03.2011
Сообщений: 2
Репутация: 2
Влад Рус
Сказал(а) спасибо: 4
Поблагодарили 1 раз в 1 сообщении
Поинты: 0

По умолчанию Работа с массивами


Добрый день форУмным людям. Даже неудобно как-то спрашивать и напрягать Вас, но про работу с массивами так мало инфы.Естьописание устройства, да как обращаться к элементам массива, а чё к ним обращаться - надо с ними чего-нить делать, но про это писано мало. Вот и приходится в ножки кланяться - моэт кто подскажет. Есть такой небольшой массивчик из учебника немного переделанный:

double arr_Orders[10][10];
int Qnt=0; // объявление и обнуление счётчика ордеров
ArrayInitialize (arr_Orders,0); // обнуление массива
for(int i=0; i<OrdersTotal();i++) // ищем ордера и заполняем массив
{
if((OrderSelect(i,SELECT_BY_POS)==true)
&& (OrderSymbol()==Symbol()))
{ Qnt++;
arr_Orders[Qnt][1]=OrderOpenPrice();
arr_Orders[Qnt][2]=OrderStopLoss();
arr_Orders[Qnt][3]=OrderTakeProfit();
arr_Orders[Qnt][4]=OrderTicket();
arr_Orders[Qnt][5]=OrderLots();
arr_Orders[Qnt][6]=OrderType();
arr_Orders[Qnt][7]=OrderMagicNumber();
arr_Orders[Qnt][8]=OrderProfit();
arr_Orders[Qnt][9]=OrderOpenTime();
} } arr_Orders[0][0]=Qnt;

Задача 1: Выдернуть из его два ордера с одинаковым OrderOpenTime(), чтобы один из них убыточный закрыть по тикеру - нужен тикер.
Задача 2: Достать из его ордер с наименьшим OrderProfit() (среди всех ордеров в массиве), чтобы с ним тоже чё-нить сделать тоже по тикеру. Нутром чую - нужен перебор и функция MathMin, а с какой стороны подступиться не пойму... Уже неделю сижу - мозги набекрень. Буду рад получить форУмный совет. ВСЕМ Спасибо.
Влад Рус вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
SlavaR (02.10.2012)
Старый 02.12.2011, 22:49   #18 (permalink)
Новичок форума
 
Аватар для andrspir
 
Регистрация: 20.01.2010
Адрес: Мценск
Сообщений: 23
Репутация: 12
andrspir
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 4 сообщениях
Поинты: 0

По умолчанию Как скачать текстовый файл?


Помогите, как в советнике реализовать скачивание текстового файла по адресу в интернете?
andrspir вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 03.12.2011, 15:59   #19 (permalink)
Активный участник
 
Аватар для Lender
 
Регистрация: 19.07.2011
Сообщений: 56
Репутация: 75
Lender
Сказал(а) спасибо: 9
Поблагодарили 74 раз(а) в 35 сообщениях
Поинты: 6
Отправить сообщение для Lender с помощью Skype™
Сообщение от Влад Рус Посмотреть сообщение
Задача 1: Выдернуть из его два ордера с одинаковым OrderOpenTime(), чтобы один из них убыточный закрыть по тикеру - нужен тикер.
написал как есть, ничего не проверял

PHP код:
 int ord1ord2;
 
bool find false;
   
 for( 
<= arr_Orders[0][0] ; i++ ) // нумерация идет с 1 так как в строе 0 хранится кол-во ордеров в масиве
 
{
   
ord1 i// записали строку с ордером для сравнения с остальными ордерами
     
     
for( int j <= arr_Orders[0][0] ; j++ ) // цикл перебора остальных ордеров
     
{
        if( 
arr_Orders[j][9] >= arr_Orders[i][9]-20 && arr_Orders[j][9] <= arr_Orders[i][9]+20 )
        {            
// если время открытия ордеров отличаются друг от друга на +-20 секунд 
          
ord2 j;
          
find true;
          break; 
// перерываем выполнения цикла(выходим из его так как уже нашли что искали)
        
}
     }
 }
 
 if( 
find )
 {
   if( 
OrderSelectarr_Orders[ord1][4], SELECT_BY_TICKET ) )
     if( 
OrderProfit() < 0.0 )
     {
       
OrderClose(...);
     }
     else if( 
OrderSelectarr_Orders[ord2][4], SELECT_BY_TICKET ) )
     if( 
OrderProfit() < 0.0 )
       
OrderClose(...);     
 } 
Вторая задачка

PHP код:
 int ticket = EMPTY;
 
int profit;
    
 for( 
<= arr_Orders[0][0] ; i++ ) // нумерация идет с 1 так как в строе 0 хранится кол-во ордеров в масиве
 
{
   if( 
OrderSelect(arr_Orders[i][4], SELECT_BY_TICKET) )
   { 
     if( 
ticket == EMPTY )
     {
       
profit OrderProfit()+OrderSwap()+OrderCommission();
       
ticket arr_Orders[i][4];
     }  
     else
     {
       if( 
OrderProfit()+OrderSwap()+OrderCommission() < profit )
       {
         
profit OrderProfit()+OrderSwap()+OrderCommission();
         
ticket arr_Orders[i][4];
       }
     }
   }
 } 
тоже не тестил, в переменной ticket будет хранится тикет ордера с наименьшим профитом или EMPTY если никаких оржеров не нашло

А вообще двумерные массивы очень редко используются на практике, сколько не писал(на мкл) мне вообще не приходилось ими пользоваться...

как по мне за использование двумерных массивов как в примере нужно по руках бить...

Последний раз редактировалось Lender; 03.12.2011 в 16:17.
Lender вне форума   Ответить с цитированиемОтветить с цитированием  
3 пользователя(ей) сказали cпасибо:
eevviill (17.10.2013), SlavaR (02.10.2012), Влад Рус (05.12.2011)
Старый 05.12.2011, 04:33   #20 (permalink)
Активный участник
 
Аватар для Walt6730
 
Регистрация: 19.05.2009
Сообщений: 36
Репутация: 2
Walt6730
Сказал(а) спасибо: 15
Поблагодарили 2 раз(а) в 2 сообщениях
Поинты: 28

По умолчанию Помощь тупому :)


Господа,

Очень нужна помощь. Имеется индикатор, очень простой и всем, наверное, известный: Trend Magic. Основан на двух стандартных индикаторах: CCI(50) и ATR(5). Рисует очень красивые линии на графике. У меня, как чайника в программировании, имеется вопрос: как из значений CCI и ATR получается значение, которое отображается на графике цены и по которому рисуется эта самая линия? Можете вывести формулу?
Вложения:
Тип файла: mq4 Trend Magic.mq4 (2.4 Кб, 86 просмотров)
Walt6730 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Fractlr (15.04.2015)
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 23:08. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO