Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 200

 
STARIJ:

Артем, или это у Вас троллинг ненавязчивый такой, или Вы сами не понимаете, о чем пишете!!!

В прошлом посте Вы говорили о сортировке. Объяснил Вам, что зависимость от сортировки отсутствует.

Дискуссии о выборе ордеров по времени видел и ПРИНИМАЛ УЧАСТИЕ в одной из них. Вывод был сделан такой, что сейчас ордера располагаются в базе данных ордеров по времени их отправки на сервер. Но ТЕОРЕТИЧЕСКИ есть опасение, что разработчики могут это изменить. На этом та дискуссия закончилась. Как специалист по базам данных заверяю Вас, что это опасение напрасно, изменение исключено. Можете обратиться с этим вопросом к разработчикам. Если что-то пишу - то знаю, что пишу. Подходит 50-летний юбилей программирования. Если заметите в моих постах какую-то лажу с Вашей точки зрения - пишите в личку. Объясню, и Ваши сомнения развеются. А здесь препираться вряд ли уместно. Написал человеку скрипт - он сказал спасибо. Ведь хорошо?

Вот так же считали все те, кто рраз, и нарвался на то, что внезапно появилась зависимость от сортировки. У людей грохнулась логика. Потом опять зависимость от сортировки исчезла. Но ведь уже было. Если вы желаете зависеть не от своей программы, а от гипотетического неизменения сортировки - ваше право, но в ветке помощи новичкам вы не имеете такого права - дать скрипт, и не упомянуть о том, что он может когда-нибудь дать сбой. Поищите такие обсуждения на mql4.com - лет 6 - 7 назад.

Так я и упомянул - человек говорил про стоплосс, а не убыток.

Спасибо-то он сказал - вежливый, но он же не знает верно там, или нет ;)

 
Artyom Trishkin:

Так я и упомянул - человек говорил про стоплосс, а не убыток.

Спасибо-то он сказал - вежливый, но он же не знает верно там, или нет ;)

Внимательно посмотрите, что человек написал

X = OrderProfit( );        // запомнить величину тейкпрофита

if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))     // если ПОСЛЕДНИЙ ордер                  
if ( OrderType ()==OP_SELL)  // СЕЛ

if(X < 0)                 // и если этот сел закрылся по стопу 

Отсюда следует, что он имел в виду убыточные ордера. Так он понимает стоп. Слово стоплосс у него отсутствует

Хотел еще написать ему, что стопы - это обобщенное название StopLoss и TakeProfit. Чтобы убедиться в этом, наберите в MetaEditor 130 и нажмите F1

Стопы. Во множественном числе.

Тут работаю, Вы меня отвлекаете

Давайте лучше скажите   datetime --> TimeToStruct -->MqlDateTime  Как теперь обратно в datetime ???

 
STARIJ:

Внимательно посмотрите, что человек написал

Отсюда следует, что он имел в виду убыточные ордера. Так он понимает стоп. Слово стоплосс у него отсутствует

Хотел еще написать ему, что стопы - это обобщенное название StopLoss и TakeProfit. Чтобы убедиться в этом, наберите в MetaEditor 130 и нажмите F1

Стопы. Во множественном числе.

Тут работаю, Вы меня отвлекаете

Давайте лучше скажите   datetime --> TimeToStruct -->MqlDateTime  Как теперь обратно в datetime ???

if(X < 0)                 // и если этот сел закрылся по стопу 

StructToTime()

 
виталик: на часовом графике отрисовывалась линия между хая и лоу
//+-------------------------------------------------------+
//| на H1 суточную линию между хая и лоу         PROBA.mq4|
//+-------------------------------------------------------+
#property strict

void OnStart()
{
  // Удалим все объекты
  ObjectsDeleteAll();

  string Символ = "GBPUSD";
  datetime Первый, Последний;
  int Период=PERIOD_H1;

  // Прежде всего узнаем дату и время последнего бара
  Последний = iTime(Символ, Период, 0);
  Alert("Последний бар на часовом  ",Последний);

  // Теперь получить начало суток, обнулив часы
  // Для этого преобразуем время последнего бара в структуру
  MqlDateTime MqlПервый;
  TimeToStruct(Последний,MqlПервый);
  MqlПервый.hour=0;



  // Терерь надо обратно преобразовать во время
  Первый=StructToTime(MqlПервый);
  Alert("Первый бар на часовом  ",Первый); // Смотрим начало первого бара суток

  // По времени определим номер первого бара суток
  int НомерПервого=iBarShift(Символ, PERIOD_H1,Первый);
  Alert("Первый бар на часовом под номером ",НомерПервого);

// Можно было просто узнать время начала бара на D1


  
  // Теперь у нас есть НомерПервого бара, а номер послелнего = 0
  // Найдем на этом интервале номера баров, где макс и мин
  // iHighest и iLowest находят номер бара с макс и мин ценой
  int БарМакс = iHighest(Символ,  // symbol = инструмента
                Период,           // timeframe = Период
                MODE_HIGH,        // Наибольшая цена бара
                НомерПервого+1,   // Количество баров
                0);               // Начальный бар

  int БарМин  = iLowest(Символ,
                Период,
                MODE_LOW,         // Наименьшая цена бара
                НомерПервого+1,
                0);

  Alert("Максимальный бар = ", БарМакс, "  Минимальный бар = ", БарМин);

  // iHigh и iLow дают макс и мин цены указанного бара
  double max_price=iHigh(Символ, Период, БарМакс);
  double min_price=iLow (Символ, Период, БарМин);
  Alert("Максимум цены = ", max_price, "  Минимум цены = ", min_price);

  // Проводим линию
  ObjectCreate("Макс_Мин",OBJ_TRENDBYANGLE,0, Time[БарМакс], max_price, Time[БарМин], min_price);
  ObjectSet("Макс_Мин",OBJPROP_RAY,false);     // Выключить свойство бесконечного луча

  // Теперь хорошо бы узнать угол
  Alert("Угол = ", ObjectGetDouble(0,"Макс_Мин",OBJPROP_ANGLE));
}

  

  // Возвращает 0.0   Угол надо задавать, а потом уж получать...
  // Значит, зная разность цен и количество баров между Макс и Мин, угол надо вычислять
  // Наверное, можно покороче...

 
STARIJ:

  

  // Возвращает 0.0   Угол надо задавать, а потом уж получать...
  // Значит, зная разность цен и количество баров между Макс и Мин, угол надо вычислять
  // Наверное, можно покороче...


огромное спс )
 
Artyom Trishkin:   StructToTime()
Спасибо, нашел. Оказывается, уже использовал. Ожидал увидеть ее в справке на одну из    datetime    TimeToStruct    MqlDateTime
 
-Aleks-:

 

Уф, что то я не могу сообразить, как добавлять переменные - т.е. допустим, у меня их 4 булевых, и нужно их перебрать?

Я понимаю суть дела - должен быть остаток меньше или больше нуля после деления - но не как не соображу как этого добиться :(


Для булевых подход немного другой

//+------------------------------------------------------------------+
//|                                                       Decode.mq4 |
//|                                            Copyright 2017, Vinin |
//|                                             http://vinin.ucoz.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Vinin"
#property link      "http://vinin.ucoz.ru"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int N=15;  //0..162
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for(int n=0;n<N;n++)
     {
      int tmp=n;
      bool a= (bool) MathMod(tmp,2);
      tmp=tmp/2;
      bool b= (bool) MathMod(tmp,2);
      tmp=tmp/2;
      bool c= (bool) MathMod(tmp,2);
      tmp=tmp/2;
      bool d= tmp;

      Print("N=",n,"; A=",a,"; B=",b,"; C=",c,"; D=",d);
     }

  }

двоичное кодирование.

Максимальное N  в этом случае меньше 16

Не могу понять что Вы хотите получить

 
Victor Nikolaev:


Для булевых подход немного другой

двоичное кодирование.

Максимальное N  в этом случае меньше 16

Не могу понять что Вы хотите получить

 Вы генний! Спасибо!

 у меня получилось 16 вариантов

2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=15; A=true; B=true; C=true; D=true
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=13; A=true; B=false; C=true; D=true
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=9; A=true; B=false; C=false; D=true
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=1; A=true; B=false; C=false; D=false
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=5; A=true; B=false; C=true; D=false
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=3; A=true; B=true; C=false; D=false
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=11; A=true; B=true; C=false; D=true
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=7; A=true; B=true; C=true; D=false
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=14; A=false; B=true; C=true; D=true
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=6; A=false; B=true; C=true; D=false
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=10; A=false; B=true; C=false; D=true
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=2; A=false; B=true; C=false; D=false
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=12; A=false; B=false; C=true; D=true
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=4; A=false; B=false; C=true; D=false
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=8; A=false; B=false; C=false; D=true
2017.05.14 20:47:54.697 Brut AUDUSD,H1: N=0; A=false; B=false; C=false; D=false

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

огромное спс )

STARIJ:

  

  // Возвращает 0.0   Угол надо задавать, а потом уж получать...
  // Значит, зная разность цен и количество баров между Макс и Мин, угол надо вычислять
  // Наверное, можно покороче...


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

#property indicator_chart_window
extern int boom = 1;
//=================================
void fishka(int ma,int mi,double map,double mip) // ф-ция
{
   ObjectCreate("Макс_Мин",OBJ_TRENDBYANGLE,0, Time[ma], map, Time[mi], mip);// Проводим линию
   ObjectSet("Макс_Мин",OBJPROP_RAY,false);     // Выключить свойство бесконечного луча
}

int deinit()
  {

 ObjectsDeleteAll();// Удалим все объекты
  return(0);
  }

void start()
{  
  string Символ = "GBPUSD";
  datetime Первый, Последний;
  int Период=PERIOD_H1;

  Последний = iTime(Символ, Период, 0);// Прежде всего узнаем дату и время последнего бара
 
if(boom){
   Alert("Последний бар на часовом  ",Последний);}
 
  
  MqlDateTime MqlПервый;              // Теперь получить начало суток, обнулив часы
  TimeToStruct(Последний,MqlПервый);  // Для этого преобразуем время последнего бара в структуру
  MqlПервый.hour=0;

  
  Первый=StructToTime(MqlПервый);            // Терерь надо обратно преобразовать во время
if(boom){
  Alert("Первый бар на часовом  ",Первый);}  // Смотрим начало первого бара суток
  
  int НомерПервого=iBarShift(Символ, PERIOD_H1,Первый);// По времени определим номер первого бара суток
if(boom){
   Alert("Первый бар на часовом под номером ",НомерПервого);}

// Можно было просто узнать время начала бара на D1

  // Теперь у нас есть НомерПервого бара, а номер послелнего = 0
  // Найдем на этом интервале номера баров, где макс и мин
  // iHighest и iLowest находят номер бара с макс и мин ценой
 int  БарМакс = iHighest(Символ,  // symbol = инструмента
                Период,           // timeframe = Период
                MODE_HIGH,        // Наибольшая цена бара
                НомерПервого+1,   // Количество баров
                0);               // Начальный бар

int  БарМин  = iLowest(Символ,Период,MODE_LOW,НомерПервого+1,0); // Наименьшая цена бара
                               
if(boom){
  Alert("Максимальный бар = ", БарМакс, "  Минимальный бар = ", БарМин);}
                                                                           

 
double max_price=iHigh(Символ, Период, БарМакс); // iHigh и iLow дают макс и мин цены указанного бара
double min_price=iLow (Символ, Период, БарМин);
   
    fishka(БарМакс,БарМин,max_price,min_price); // ф-ция
 if(boom){
   Alert("Максимум цены = ", max_price, "  Минимум цены = ", min_price);
 
   Alert("Угол = ", ObjectGetDouble(0,"Макс_Мин",OBJPROP_ANGLE));} // Теперь хорошо бы узнать угол               
}
 
STARIJ:

Если в 4 часа утра - еще мало баров за сегодняшний день. На H4 за сутки всего 6 баров. надо задать количество баров для поиска или количество пересечений.

 

Расстояния большие = тренд

Запускаю как скрипт все работает , а если компелирую код как советник то все линии находятся рядом немогу понять в чем подвох
Причина обращения: