MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 67

 
Aliaksandr Kryvanos :
bool WriteToFile( int FileHandle, string DataToWrite)
  {
// Receives the number of bytes written to the file. Note that MQL can only pass
// arrays as by-reference parameters to DLLs
   int BytesWritten[ 1 ]={ 0 };

// Get the length of the string
   int szData= StringLen (DataToWrite);

// Do the write
   WriteFile(FileHandle,DataToWrite,szData,BytesWritten, 0 );

// Return true if the number of bytes written matches the expected number
   return (BytesWritten[ 0 ] == szData);
  }

Bir dosyaya yeni satır çevirileri olan bir satır yazmak istiyorum ama olmuyor bu kod buradan https://www.mql5.com/en/forum/118999

bu kod genel olarak ve her harften sonra boşluklu bir satır yazıyor, yedek bir FileWrite () bulmam gerekiyor ama çalışıyor

Burayı okuyun .
 
Teşekkürler, bu makale benim için daha uygun https://www.mql5.com/en/articles/1540 ama yine de kernel32.dll'den WriteFile() kullanır ve satır beslemeleri ile arkadaş yapardım
Файловые операции через WinAPI
Файловые операции через WinAPI
  • 2008.07.03
  • MetaQuotes Software Corp.
  • www.mql5.com
Исполнительная среда MQL4 основана на концепции безопасной "песочницы": чтение и запись средствами языка разрешены только в определенных папках. Это защищает пользователя MetaTrader 4 от потенциальной опасности испортить важные данные на жестком диске компьютера. Но иногда все же бывает необходимость покинуть безопасную зону. Как это сделать легко и правильно - об этом статья.
 
Artyom Trishkin :
Bir fonksiyonun ne olduğunu okuyun lütfen. O zaman , işlevin gövdesinde bildirilen dizinin yerel olacağını anlayacaksınız - programın geri kalanının görüş alanı dışında.

Yani, 3 fonksiyona ihtiyacım var

1) nerede ilan edeceğim

2) yardımıyla oraya değerler ekleyeceğim

3) yardımıyla onları kaldıracağım

Sağ?

 
trader781 :

Yani, 3 fonksiyona ihtiyacım var

1) nerede ilan edeceğim

2) yardımıyla oraya değerler ekleyeceğim

3) yardımıyla onları kaldıracağım

Sağ?

Burayı dikkatle okuyoruz.
Учёт ордеров - Создание обычной программы - Учебник по MQL4
Учёт ордеров - Создание обычной программы - Учебник по MQL4
  • book.mql4.com
Учёт ордеров - Создание обычной программы - Учебник по MQL4
 
Alekseu Fedotov :
Burayı dikkatle okuyoruz.

Tamam, iki boyutlu bir diziye (bilet+lot) emirler yazacak bir void fonksiyonu yapalım.

şöyle bir görüntü elde ederiz

         
             if ( Ask >=FindLastOrderOpenPrice()+Step* Point ()) //+------------если ордер в плюс и это 5 ордер в списке
              {
               ticket= OrderSend ( Symbol (), OP_BUY ,(лот 2 ордера+лот 4 ордера), Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrAzure );
               Функция записи();
              }  
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно

 
trader781 :

Tamam, iki boyutlu bir diziye (bilet+lot) emirler yazacak bir void fonksiyonu yapalım.

şöyle bir görüntü elde ederiz

         
             if ( Ask >=FindLastOrderOpenPrice()+Step* Point ()) //+------------если ордер в плюс и это 5 ордер в списке
              {
               ticket= OrderSend ( Symbol (), OP_BUY ,(лот 2 ордера+лот 4 ордера), Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrAzure );
               Функция записи();
              }  
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно

Söyle bana lütfen, bir dizinin nasıl kullanılacağını öğrenmenin yanı sıra, neden bir diziye bilet ve lot yazalım? Bilgisayarı kapattığınızda, tüm dizi çökecek, güvenilir olmadığı için neden başlangıçta bunu yapıyorsunuz? Tabii dizilerle çalışmayı öğrenmenin bir anlamı yoksa ...)
 
Vladimir Zubov :
Söyle bana lütfen, bir dizinin nasıl kullanılacağını öğrenmenin yanı sıra, neden bir diziye bilet ve lot yazalım? Bilgisayarı kapattığınızda, tüm dizi çökecek, güvenilir olmadığı için neden başlangıçta bunu yapıyorsunuz? Tabii dizilerle çalışmayı öğrenmenin bir anlamı yoksa ...)

tamam, bana düzensiz bir ızgarada basit bir şekilde 6 veya biletlerle 8 sipariş bul

Bir emirler ağı olduğu sürece ona ihtiyacım var, sonra bırak gitsin.

yukardaki kodda amacı belirttim
 
trader781 :

tamam, bana düzensiz bir ızgarada basit bir şekilde 6 veya biletlerle 8 sipariş bul

Bir emirler ağı olduğu sürece ona ihtiyacım var, sonra bırak gitsin.

yukardaki kodda amacı belirttim

Burada, birkaç parametreye göre sıralama şansı vardır, bu nedenle iki boyutlu bir dizi kullanılır.

Umarım nasıl kullanılır - anlamayacaksınız, değilse - serbest çalışmak)

double BPosMass[][ 2 ];
double SPosMass[][ 2 ];

void OnTick ()
{
// Заполняем массивы
int b=- 1 ,s=- 1 ; // Объявим переменные с минусом
   for ( int i= 0 ; i< OrdersTotal (); i++) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==Magic || Magic< 0 )) {
     if ( OrderType ()== OP_BUY ) {
      b++;
       ArrayResize (BPosMass,b+ 1 );
       BPosMass[b][ 0 ]= ( int ) OrderOpenPrice (); // Для сортировки = можно сортировать по: OrderProfit(), OrderLots(), OrderTicket(), OrderOpenTime()
       BPosMass[b][ 1 ]= OrderTicket (); // Для чтения
     }
     if ( OrderType ()== OP_SELL ) {
      s++;
       ArrayResize (SPosMass,s+ 1 );
       SPosMass[s][ 0 ]= ( int ) OrderOpenPrice (); // Для сортировки = можно сортировать по: OrderProfit(), OrderLots(), OrderTicket(), OrderOpenTime()
       SPosMass[s][ 1 ]= OrderTicket (); // Для чтения
     }
  }}} // конец записи массив

// Читаем отсортированный массив с тикетами
// Buy
   if (b> 0 ) { // Если он не пустой  и больше двух элементов - [0], иначе будет ошибка: "Выход за пределы массива"
     ArraySort (BPosMass, WHOLE_ARRAY , 0 , MODE_ASCEND ); // Отсортируем по первому измерению
     // Работа с полученными данными
     Comment ( "Самый старый Buy тикет: " ,    BPosMass[ 0 ][ 1 ],
             "\nПоследний Buy тикет: " ,     BPosMass[b][ 1 ],
             "\nПредпоследний Buy тикет: " , BPosMass[b- 1 ][ 1 ]
           );

  } // end Buy

// Sell
   if (s> 0 ) { // Если он не пустой и больше двух элементов  - [0] , иначе будет ошибка: "Выход за пределы массива"
     ArraySort (SPosMass, WHOLE_ARRAY , 0 , MODE_ASCEND ); // Отсортируем по первому измерению
     // Работа с полученными данными
     Comment ( "Самый старый Sell тикет: " ,    SPosMass[ 0 ][ 1 ],
             "\nПоследний Sell тикет: " ,     SPosMass[s][ 1 ],
             "\nПредпоследний Sell тикет: " , SPosMass[s- 1 ][ 1 ]
           );

  } // end Sell
  
// Конец функции OnTick()
}
 
Vitaly Muzichenko :

Burada, birkaç parametreye göre sıralama şansı vardır, bu nedenle iki boyutlu bir dizi kullanılır.

Umarım nasıl kullanılır - anlamayacaksınız, değilse - serbest çalışmak)

double  BPosMass[][];
önceden boyutsuz nasıl elde edilir, boş değerler yuvarlanmaz
 
trader781 :
önceden boyutsuz nasıl elde edilir, boş değerler yuvarlanmaz

Zaten boyutsuzdur, ancak iki boyutludur ve boyutsuz sayıda öğeyi iki boyuta koyabilirsiniz.

Genel olarak ne yaparsınız, yaptığınız işin sonucunun ne olması gerektiğine dair bir fikriniz var mı? Yoksa ilerledikçe mantık mı icat ediyorsun?