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

chocolate

Гуру форума
Последнее редактирование модератором:

Arnold100

Прохожий
Помогите разобраться! Хочу написать индикатор (скрипт). Принцип работы такой: я строю произвольную трендовую линию от A до B, а индикатор рассчитывает сколько цена прошла в пунктах по ценовой шкале, т.е. В-А. А также сколько цена прошла по времени в барах от А до В! Может кто-нибудь подскажет с чего начать???
 

andrspir

Новичок форума
Прошу помочь примером

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

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

Советник работает потиково и уменя билеберда.
 

Lender

Активный участник
строиш свою трендовую на графике руками,
в скрипте\индюке\сове узнаеш нужные тебе параметры своей линии
спомощью
ObjectGet( string name, int prop_id)
name - имя твоего обекта
prop_id - Идентификатор свойства объекта. Может быть любым из значений списка свойств объекта.

Пример вызова:
PHP:
Expand Collapse Copy
 double price1 = ObjectGet("hline12", OBJPROP_PRICE1);

в хелпе все достаточно понятно описано
 

Lender

Активный участник
PHP:
Expand Collapse Copy
     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 ; }
        }
     }
Лови, только я не проверял на работоспособность, просто выдернул с стандартного сова МувингАвераге кусок кода и изменил всего две строки...
 

andrspir

Новичок форума
спасибо огромное...
вроде вырисовывается очень надежная системка которая бережет нервы...
как отлажу обязательно выложу
 

fairslog

Новичок форума
Добрый день, в прграмировании новичёк, охота разобраться но времени не хватает, есть советник, хочу в него добавить трал, может ктонибудь объяснить как это правильно вписать, сам советник - декомпил.
Буду очень признателен, ещё , торговля в советнике пачкой ордеров.
 

Lender

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

если же не жалко 5-13 можно обратится к платному программисту в разделе работа, или за бесплатно с форума какого то прогера подправить попроси...
 

fairslog

Новичок форума
Спасибо за рекомендации, не святые горшки лепят, так и тут, просто интересно разобраться как правильно это сделать, когдато все програмисты с чего то начинали и то-же также спрашивали, мне вузы поздно оканчивать, а вот понять чтоб для себя это делать хотя бы интересно.....
Так что вопрос остаётся актуальным.
 

271863768

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

Вложения

Lender

Активный участник
Спасибо за рекомендации, не святые горшки лепят, так и тут, просто интересно разобраться как правильно это сделать, когдато все програмисты с чего то начинали и то-же также спрашивали, мне вузы поздно оканчивать, а вот понять чтоб для себя это делать хотя бы интересно.....
Так что вопрос остаётся актуальным.

если хочешь изучить мкл, то начинай с азов: типы переменных(представление данных), условные операторы, циклы, функции без параметров и с ими, если это знать то мкл4 с его хелпом со стандартным функциями дальше изучить труда не составит, так как хелп там ну оочень тяжело не понять

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

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

в разделе "работа" на этом форуме тебе охотно помогут, там и моя ветка есть
 
Последнее редактирование:

271863768

Новичок форума
Подскажите пожалуйста как реализовать отложенный ордер на расстоянии от МА для 5 знака

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

Lender

Активный участник
Подскажите пожалуйста как реализовать отложенный ордер на расстоянии от МА для 5 знака

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

ERR_INVALID_PRICE_PARAM 4107 Неправильный параметр цены для торговой функции
гугл и хелп в помощь

перед тем как подавать цену в OrderSend ее нужно нормализировать(привести к нужному кол-ву знаков за запетой)
PHP:
Expand Collapse Copy
price = NormalizeDouble( ma+Dist_ , Digits);
OrderSend(Symbol(),OP_BUYSTOP,0.1, price,NULL,NULL,Blue);

а в алерте все виглядело хорошо скорее всего из-за того что в параметер цену ты передавал как double а не string

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

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

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

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

271863768

Новичок форума
Прошу меня извинить :-[ ну никак не могу понять как реализовать функцию подсчета прибыли или убытка закрытого ордера или суммы ордеров :)
 

Lender

Активный участник
Прошу меня извинить :-[ ну никак не могу понять как реализовать функцию подсчета прибыли или убытка закрытого ордера или суммы ордеров :)

схожий выше есть примемр:
PHP:
Expand Collapse Copy
     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:
Expand Collapse Copy
     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;}
        }
     }

пслалось прям тут, на правильность не проверял, что нужно еще сам допишешь
 
Последнее редактирование:

max020780

Новичок форума
помогите пожалуйста разобраться как сделать так чтобы в этом коде
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 тоже на каждом новом баре
}

}


А то у меня получается только либо открывается только один ордер как только условие выполнилось либо вообще на каждом тике открывает
 

Влад Рус

Прохожий
Работа с массивами

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

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, а с какой стороны подступиться не пойму... Уже неделю сижу - мозги набекрень. Буду рад получить форУмный совет. ВСЕМ Спасибо.
 

andrspir

Новичок форума
Как скачать текстовый файл?

Помогите, как в советнике реализовать скачивание текстового файла по адресу в интернете?
 

Lender

Активный участник
Задача 1: Выдернуть из его два ордера с одинаковым OrderOpenTime(), чтобы один из них убыточный закрыть по тикеру - нужен тикер.

написал как есть, ничего не проверял

PHP:
Expand Collapse Copy
 int ord1, ord2;
 bool find = false;
   
 for( i = 1 ; i <= arr_Orders[0][0] ; i++ ) // нумерация идет с 1 так как в строе 0 хранится кол-во ордеров в масиве
 {
   ord1 = i; // записали строку с ордером для сравнения с остальными ордерами
     
     for( int j = i ; 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( OrderSelect( arr_Orders[ord1][4], SELECT_BY_TICKET ) )
     if( OrderProfit() < 0.0 )
     {
       OrderClose(...);
     }
     else if( OrderSelect( arr_Orders[ord2][4], SELECT_BY_TICKET ) )
     if( OrderProfit() < 0.0 )
       OrderClose(...);     
 }

Вторая задачка

PHP:
Expand Collapse Copy
 int ticket = EMPTY;
 int profit;
    
 for( i = 1 ; i <= 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 если никаких оржеров не нашло

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

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

Walt6730

Новичок форума
Помощь тупому :)

Господа,

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

Вложения

Верх