MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 67
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
{
// 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
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ğ?
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.
Tamam, iki boyutlu bir diziye (bilet+lot) emirler yazacak bir void fonksiyonu yapalım.
şöyle bir görüntü elde ederiz
{
ticket= OrderSend ( Symbol (), OP_BUY ,(лот 2 ордера+лот 4 ордера), Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrAzure );
Функция записи();
}
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно
Tamam, iki boyutlu bir diziye (bilet+lot) emirler yazacak bir void fonksiyonu yapalım.
şöyle bir görüntü elde ederiz
{
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 ...)
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ı belirttimtamam, 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ı belirttimBurada, 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 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()
}
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)
ö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?