ZigZaHod - Отмеренный ход от фрактала или ZigZag на массиве . - страница 3

 
И тишина...
 
ForTorg:
И тишина...

Все наверно в шоке... 

Очень плохо когда функции имеют вид: void NameFunc(void) - какой смысл в ней? Ничего не принимает, нечего возвращает... на хрена тратить время процессора на переход к ней? Глобальные переменные это здорово, но накладно для памяти. Используй больше локальных(внутри функции) переменных, память освободиться сразу по завершению функции. А это что ?- FileWriteInteger(h,ArraySize(Massiv),LONG_VALUE); придумал для себя маленькую проблему? Зачем писать в свой файл сколько ты туда писал? Это твой файл, и никто кроме тебя его читать не будет... пиши проще и лаконичней... 

void OnStart()

  {

   //--- value

   int    NowOutArray[] = {1,2,3,4,5,6,7,8,9,10};

   int    NowInArray[];

   string NowName = "Testy.bin";

   //--- Test # 1. Write to the file

   MyCFileWrite(NowName,NowOutArray);

   //--- Test # 2. Read file

   MyCFilesOpen(NowName,NowInArray);

   //---

   return;

  }

//+------------------------------------------------------------------+

//| Функция-читалка                                                  |

//+------------------------------------------------------------------+

int MyCFilesOpen(string NameFile,            // Имя файла

                 int   &OutBuf[],            // Выходной буфер(это указатель на массив без размера!)

                 int    SizeRead = INT_VALUE // размер целого типа в байтах

                )

  {

   //--- value

   int   ret = -1;

   int   handleF = FileOpen(NameFile,FILE_BIN|FILE_READ);

   if(handleF == INVALID_HANDLE) return(ret);

   ulong SizeDataToRead = FileSize(handleF)/SizeRead;

   //---

   for(int i=0;i<(int)SizeDataToRead&&!IsStopped();i++)

     {

      ArrayResize(OutBuf,i+1,(int)SizeDataToRead);

      OutBuf[i] = FileReadInteger(handleF);

     }

   //---

   ret = ArraySize(OutBuf);

   FileClose(handleF);

   //---

   return(ret);

   }  

//+------------------------------------------------------------------+

//| Функция-писалка                                                  |

//+------------------------------------------------------------------+

int MyCFileWrite(string NameFile,   // Имя файла

                 int   &InBuf[]     // Входной буфер

                )

  {

   //--- value

   int ret = -1;

   int handleF=FileOpen(NameFile,FILE_BIN|FILE_WRITE);

   if(handleF == INVALID_HANDLE) return(ret);

   //---

   ret = (int)FileWriteArray(handleF,InBuf,0,ArraySize(InBuf));

   //---

   FileClose(handleF);

   //---

   return(ret);

  }  

//+------------------------------------------------------------------+

 И старайся выработать простое правило: мои функции, классы, структуры начинаются MyC !

 Удачи!

 
nav_soft:

Все наверно в шоке... 

Очень плохо когда функции имеют вид: void NameFunc(void) - какой смысл в ней? Ничего не принимает, нечего возвращает... на хрена тратить время процессора на переход к ней? Глобальные переменные это здорово, но накладно для памяти. Используй больше локальных(внутри функции) переменных, память освободиться сразу по завершению функции. А это что ?- FileWriteInteger(h,ArraySize(Massiv),LONG_VALUE); придумал для себя маленькую проблему? Зачем писать в свой файл сколько ты туда писал? Это твой файл, и никто кроме тебя его читать не будет... пиши проще и лаконичней... 

 И старайся выработать простое правило: мои функции, классы, структуры начинаются MyC !

 Удачи!

Спасибо. Мало что понял но попытаюсь разобраться.
 
ForTorg:
Спасибо. Мало что понял но попытаюсь разобраться.
Обрати внимание на функцию ArrayResize(...). Я не случайно засунул её в цикл. Если привыкнеш её использовать таким образом, то сможешь организовывать экономные массивы. 
Но настоящая сила MQL5 классы, и её стандартная библиотека имеет развитую систему.

Удачи.
 
И старайся выработать простое правило: мои функции, классы, структуры начинаются MyC !

Всем добра. Подскажите как сделать правильно на элементарном примере.

Fun_New_Bar();    // Проверяем новый бар

   if(New_Bar)  { тра-ля-ля...}

//  ============================================

void Fun_New_Bar() // Ф-ия обнаружения ..нового бара
  {
   if(BBars==iBars(Symbol(),SigTfFr)) New_Bar=false;
   if(BBars!=iBars(Symbol(),SigTfFr)) {BBars=iBars(Symbol(),SigTfFr);New_Bar=true;}
  }
//+------------------------------------------------------------------+


[Удален]  
ForTorg:

Всем добра. Подскажите как сделать правильно на элементарном примере.

Fun_New_Bar();    // Проверяем новый бар

   if(New_Bar)  { тра-ля-ля...}

//  ============================================

void Fun_New_Bar() // Ф-ия обнаружения ..нового бара
  {
   if(BBars==iBars(Symbol(),SigTfFr)) New_Bar=false;
   if(BBars!=iBars(Symbol(),SigTfFr)) {BBars=iBars(Symbol(),SigTfFr);New_Bar=true;}
  }
//+------------------------------------------------------------------+


Вначале определитесь, что будет делать функция. Одна функция - одно конкретное действие. В данном случае, как я понял, нужно проверить факт образования нового бара.

Можно, конечно, обратиться к статье. Рассказывается про множество подводных камней и как их обойти.

Но, если по-простому и для форекса в большинстве случаев должен помочь такой алгоритм:

bool IsNewBar()                                                           // bool - означает возврат значения логического типа ( true или false )
   {
    static datetime savedTime;                                            // Сохраненное время (переменная статическая, дабы сохраняла свое значение после завершения функции)
    datetime time = iTime( /* указываем символ, период, номер бара */ );  // Получаем время открытия свечи по символу/периоду (см. документацию)
    if( time == savedTime ) return( false );                              // Если время совпадает с сохраненным - новый бар не образовался - возвращаем ложь

    savedTime = time;                                                     // Если время не совпадает - запоминаем время time в статическую переменную (эталон для сравнения)
    return( true );                                                       // Возвращаем истину - факт образования нового бара
   }

// Далее используем так
if( !IsNewBar() ) return;     // Если новый бар не образовался - выходим (или делаем что-то)
else
   {
    // Новый бар образовался - делаем что-то
   }

// Работоспособность кода не проверял! Код для mql4

 

 

Проведена работа над ошибками... https://www.mql5.com/ru/code/12707

Может кто бегло взглянет и укажет на недостатки...

ZigZaHod v1.1
ZigZaHod v1.1
  • голосов: 4
  • 2015.03.24
  • ForTorg ZEVs
  • www.mql5.com
Отмеренный ход от фрактала или ZigZag на массиве. Исправленная версия.