Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 51
![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
Deneyimli programcıların yardımına ihtiyacınız var!
Herkese selam!
Çocuklar, yardımınıza ihtiyacımız var! Kendime bir danışman yazıyorum. Programlamada pek iyi değilim, o yüzden soruyorum. Genel olarak, piyasa emirlerine kilit koymak için bir test fonksiyonu yapıyorum. Tüm siparişler yapısal iki boyutlu bir diziye girilir. [0] dizisinin ilk indeksi (hücresi) baz (piyasa) emirleri, ikinci indeksi (hücre) [1] baz emirlerin kilitleridir. Bu nedenle, fonksiyon kilidin temel sıraya ayarlanıp ayarlanmadığını kontrol etmelidir ve - EVET ise, o zaman hiçbir şey yapmaz ve daha fazla çalışırız ve - HAYIR ise, ilgili kilidi ayarlamak için bir sinyal veririz. İşlevi yazdım, ancak bir şekilde çarpık çalışıyor. Yani örneğin bir Piyasa Al emri açılır, terminal bu emir tipinin AL değil SAT olduğunu gösterir ve bu nedenle bunun için bir kilit ayarlanması gerekir. Ve SATIŞ emirlerinde her şey düzgün çalışır. Hiçbir şey anlayamıyorum. Emirler dizilere doğru yazılmıştır. İlgili kontrolü yaptınız mı - her şey mükemmel. Dizideki tüm sipariş kriterleri doğru şekilde yansıtılır. Kodda bir hata bulmama yardım et veya bir şekilde işlevimi yeniden oluştur. fonksiyonu ekliyorum.
bool CheckOrders() // Есть массив с базовыми ордерами, открытыми по рынку InfoOrderNew[0][200]
{ // Есть массив с лок ордерами, выставленными к базовым InfoOrderNew[1][200]
int TypeOrder;
string Type = "" ,
OrderComm = "" ;
bool OpenLockOrder = false ; // Флаг на установку лок ордера
for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) // Выполняем перебор по рыночн. и отлож. ордерам
{
if (( OrderSelect (i, SELECT_BY_POS ) == true ) // Если есть следующ.
&& ( OrderSymbol () == Symbol ())) // .. и наша вал.пара
{
OrderComm = OrderComment (); // Выбираем соответствующий комментарий ордера
TypeOrder = OrderType (); // Выбираем соответствующий тип ордера
for ( int n= 0 ; n<= 199 ; n++) // Выполняем прогон по массиву ордеров
{
if ( StringFind (OrderComm, "BaseIndex #" + IntegerToString (n)+ "_" , 0 )>= 0 ) // Ищем базовый ордер с индексом в комментарии, соответствующем номеру ячейки в массиве ордеров
{
if ((TypeOrder == InfoOrderNew[ 0 ][n].TypeOrder) == OP_BUY ) // Если находим и наш ордер в массиве является BUY
{
if (InfoOrderNew[ 1 ][n].TypeOrder == 1 || InfoOrderNew[ 1 ][n].TypeOrder == 5 ) // Проверяем, выставлен ли к нему лок ордер (SELL или SELLSTOP) в массиве лок ордеров
{
if (InfoOrderNew[ 1 ][n].TypeOrder == 1 ) Type = "Sell" ;
if (InfoOrderNew[ 1 ][n].TypeOrder == 5 ) Type = "SellStop" ;
if (Debug) Print ( "Функция CheckOrders(): К ордеру Buy #" ,InfoOrderNew[ 0 ][n].TicketOrder, " найден Lock-ордер " ,Type, " #" ,InfoOrderNew[ 1 ][n].TicketOrder, "." );
break ; // Если лок выставлен, то выходим из функции
}
else // Если нет, то
{
if (Debug) Print ( "Функция CheckOrders(): К ордеру Buy #" ,InfoOrderNew[ 0 ][n].TicketOrder, " не найден Lock-ордер. Необходимо его установить!" );
OpenLockOrder = true ; // Даем сигнал на установку лока
}
}
if ((TypeOrder == InfoOrderNew[ 0 ][n].TypeOrder) == OP_SELL ) // Если наш ордер в массиве является SELL
{
if (InfoOrderNew[ 1 ][n].TypeOrder == 0 || InfoOrderNew[ 1 ][n].TypeOrder == 4 ) // Проверяем, выставлен ли к нему лок ордер (BUY или BUYSTOP) в массиве лок ордеров
{
if (InfoOrderNew[ 1 ][n].TypeOrder == 0 ) Type = "Buy" ;
if (InfoOrderNew[ 1 ][n].TypeOrder == 4 ) Type = "BuyStop" ;
if (Debug) Print ( "Функция CheckOrders(): К ордеру Sell #" ,InfoOrderNew[ 0 ][n].TicketOrder, " найден Lock-ордер " ,Type, " #" ,InfoOrderNew[ 1 ][n].TicketOrder, "." );
break ; // Если лок выставлен, то выходим из функции
}
else // Если нет, то
{
if (Debug) Print ( "Функция CheckOrders(): К ордеру Sell #" ,InfoOrderNew[ 0 ][n].TicketOrder, " не найден Lock-ордер. Необходимо его установить!" );
OpenLockOrder = true ; // Даем сигнал на установку лока
}
}
}
}
}
}
return (OpenLockOrder); // Передаем нашей функции полученное значение
}
Deneyimli programcıların yardımına ihtiyacınız var!
Herkese selam!
Çocuklar, yardımınıza ihtiyacımız var! Kendime bir danışman yazıyorum. Programlamada pek iyi değilim, o yüzden soruyorum. Genel olarak, piyasa emirlerine kilit koymak için bir test fonksiyonu yapıyorum. Tüm siparişler yapısal iki boyutlu bir diziye girilir. [0] dizisinin ilk indeksi (hücresi) baz (piyasa) emirleri, ikinci indeksi (hücre) [1] baz emirlerin kilitleridir. Bu nedenle, fonksiyon kilidin temel sıraya ayarlanıp ayarlanmadığını kontrol etmelidir ve - EVET ise, o zaman hiçbir şey yapmaz ve daha fazla çalışırız ve - HAYIR ise, ilgili kilidi ayarlamak için bir sinyal veririz. İşlevi yazdım, ancak bir şekilde çarpık çalışıyor. Yani örneğin bir Piyasa Al emri açılır, terminal bu emir tipinin AL değil SAT olduğunu gösterir ve bu nedenle bunun için bir kilit ayarlanması gerekir. Ve SATIŞ emirlerinde her şey düzgün çalışır. Hiçbir şey anlayamıyorum. Emirler dizilere doğru bir şekilde yazılmıştır. İlgili kontrolü yaptınız mı - her şey mükemmel. Dizideki tüm sipariş kriterleri doğru şekilde yansıtılır. Kodda bir hata bulmama yardım et veya bir şekilde işlevimi yeniden oluştur. fonksiyonu ekliyorum.
bool CheckOrders() // Есть массив с базовыми ордерами, открытыми по рынку InfoOrderNew[0][200]
{ // Есть массив с лок ордерами, выставленными к базовым InfoOrderNew[1][200]
int TypeOrder;
string Type = "" ,
OrderComm = "" ;
bool OpenLockOrder = false ; // Флаг на установку лок ордера
for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) // Выполняем перебор по рыночн. и отлож. ордерам
{
if (( OrderSelect (i, SELECT_BY_POS ) == true ) // Если есть следующ.
&& ( OrderSymbol () == Symbol ())) // .. и наша вал.пара
{
OrderComm = OrderComment (); // Выбираем соответствующий комментарий ордера
TypeOrder = OrderType (); // Выбираем соответствующий тип ордера
for ( int n= 0 ; n<= 199 ; n++) // Выполняем прогон по массиву ордеров
{
if ( StringFind (OrderComm, "BaseIndex #" + IntegerToString (n)+ "_" , 0 )>= 0 ) // Ищем базовый ордер с индексом в комментарии, соответствующем номеру ячейки в массиве ордеров
{
if ((TypeOrder == InfoOrderNew[ 0 ][n].TypeOrder) == OP_BUY ) // Если находим и наш ордер в массиве является BUY
{
if (InfoOrderNew[ 1 ][n].TypeOrder == 1 || InfoOrderNew[ 1 ][n].TypeOrder == 5 ) // Проверяем, выставлен ли к нему лок ордер (SELL или SELLSTOP) в массиве лок ордеров
{
if (InfoOrderNew[ 1 ][n].TypeOrder == 1 ) Type = "Sell" ;
if (InfoOrderNew[ 1 ][n].TypeOrder == 5 ) Type = "SellStop" ;
if (Debug) Print ( "Функция CheckOrders(): К ордеру Buy #" ,InfoOrderNew[ 0 ][n].TicketOrder, " найден Lock-ордер " ,Type, " #" ,InfoOrderNew[ 1 ][n].TicketOrder, "." );
break ; // Если лок выставлен, то выходим из функции
}
else // Если нет, то
{
if (Debug) Print ( "Функция CheckOrders(): К ордеру Buy #" ,InfoOrderNew[ 0 ][n].TicketOrder, " не найден Lock-ордер. Необходимо его установить!" );
OpenLockOrder = true ; // Даем сигнал на установку лока
}
}
if ((TypeOrder == InfoOrderNew[ 0 ][n].TypeOrder) == OP_SELL ) // Если наш ордер в массиве является SELL
{
if (InfoOrderNew[ 1 ][n].TypeOrder == 0 || InfoOrderNew[ 1 ][n].TypeOrder == 4 ) // Проверяем, выставлен ли к нему лок ордер (BUY или BUYSTOP) в массиве лок ордеров
{
if (InfoOrderNew[ 1 ][n].TypeOrder == 0 ) Type = "Buy" ;
if (InfoOrderNew[ 1 ][n].TypeOrder == 4 ) Type = "BuyStop" ;
if (Debug) Print ( "Функция CheckOrders(): К ордеру Sell #" ,InfoOrderNew[ 0 ][n].TicketOrder, " найден Lock-ордер " ,Type, " #" ,InfoOrderNew[ 1 ][n].TicketOrder, "." );
break ; // Если лок выставлен, то выходим из функции
}
else // Если нет, то
{
if (Debug) Print ( "Функция CheckOrders(): К ордеру Sell #" ,InfoOrderNew[ 0 ][n].TicketOrder, " не найден Lock-ордер. Необходимо его установить!" );
OpenLockOrder = true ; // Даем сигнал на установку лока
}
}
}
}
}
}
return (OpenLockOrder); // Передаем нашей функции полученное значение
}
Veya çıktı günlüğünü gösterin.
Veya çıktı günlüğünü gösterin.
Koymak. Hiçbirşey değişmedi. Olay günlüğündeki girişler şunlardır:
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: open # 1 buy 0.10 GBPUSD at 1.23020 ok
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция SendMarketOrder(): Ордер отправлен успешно! Характеристики ордера: Buy # 1 ; Цена открытия: 0.0 ; Лот: 0.1 ; Стоплосс: 0.0 ; Тейкпрофит: 0.0 .
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: В работе функция ModifyOrder()
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция ModifyOrder()
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция ModifyOrder(): Торговый поток свободен!
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: modify # 1 buy 0.10 GBPUSD at 1.23020 sl: 1.18020 tp: 1.23520 ok
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция ModifyOrder(): Модификация ордера выполнена успешно!
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: В работе функция SetPendingOrder()
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция SetPendingOrder(): Выставленная цена SellStop ордера удовлетворяет условиям брокера.
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: open # 2 sell stop 0.10 GBPUSD at 1.22020 ok
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция SetPendingOrder(): Отложенный ордер выставлен c 1 -й попытки! Характеристики ордера: SellStop # 2 ; Цена: 1.2202 ; Лот: 0.1 .
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Отложенный SellStop ордер успешно установлен!
2017.01 . 15 18 : 23 : 51.109 2017.01 . 03 04 : 30 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива Lock-ордерами. Ордер Тикет # 2 ; Цена= 1.2202 ; Тип= 5 ; ячейка[ 0 ].
2017.01 . 15 18 : 23 : 51.109 2017.01 . 03 04 : 30 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива обычными ордерами. Ордер Тикет # 1 ; Цена= 1.2302 ; Тип= 0 ; ячейка[ 0 ].
2017.01 . 15 18 : 23 : 51.109 2017.01 . 03 04 : 30 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество найденных ордеров = 2 .
2017.01 . 15 18 : 23 : 51.109 2017.01 . 03 04 : 30 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество рыночных ордеров = 1 .
2017.01 . 15 18 : 23 : 51.109 2017.01 . 03 04 : 30 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество Lock-ордеров = 1 .
2017.01 . 15 18 : 23 : 51.109 2017.01 . 03 04 : 30 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция CheckOrders(): К ордеру Sell # 1 не найден Lock-ордер. Необходимо его установить!
InfoOrderNew[ 1 ][n].TypeOrder dizisini doldurduğunuz işleve bakın
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива обычными ордерами. Ордер Тикет # 3 ; Цена= 1.2287 ; Тип ордера=Sell; ячейка[ 1 ].
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива Lock-ордерами. Ордер Тикет # 2 ; Цена= 1.2202 ; Тип ордера=SellStop; ячейка[ 0 ].
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива обычными ордерами. Ордер Тикет # 1 ; Цена= 1.2302 ; Тип ордера=Buy; ячейка[ 0 ].
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество найденных ордеров = 4 .
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество рыночных ордеров = 2 .
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество Lock-ордеров = 2 .
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция CheckOrders(): К ордеру Sell # 3 найден Lock-ордер BuyStop # 4 .
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00 Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция CheckOrders(): К ордеру Sell # 1 не найден Lock-ордер. Необходимо его установить!
Sorunu aramaya katıldığınız için Vladislav Andruschenko'ya teşekkür ederiz! Bunu anladım gibi görünüyor. Kodu biraz değiştirmek zorunda kaldım ve her şey hemen çalıştı.
tam olarak değil
Sadece hafta sonu biraz düştüm. :-) Anladığın iyi oldu.
tam olarak değil
Sadece hafta sonu biraz düştüm. :-) Anladığın iyi oldu.
Bir soru daha geldi:
Yapısal heterojen bir dizinin herhangi bir hücresindeki bilgiler nasıl sıfırlanır veya silinir? Mesele şu ki, yorumu sıraya göre değiştirdim ve bu sırayı yapısal dizinin hücresinden çıkarmam ve bu sırayı başka bir dizide tanımlamam gerekiyor. Sıradan bir dizide her şey az çok nettir, ancak yapısal olanlarda hangi operatörlerin veya işlevlerin çalıştığını veya hepsinin nasıl biçimlendirilmesi gerektiğini bilmiyorum? Ve önceki dolgu hakkındaki bilgileri kaydetmek ve ardından yeni dolgu ile karşılaştırmak için bir yapısal diziyi diğerine nasıl kopyalayabilirim? Bu konuda bilgisi olan varsa bana haber versin. Çok minnettar olacağım!
Fiyat etiketinde ( OBJ_ARROW_LEFT_PRICE ) fiyat yerine kendi metninizi göstermeniz mümkün müdür, varsa nasıl?