Her zaman sıfır sayıda (ve -1 olan) bir sipariş bulur. "Bir sonraki" sırayı belirlemenin bazı vahşi yöntemleri gerçekten yanıltıcıdır...
sipariş yoksa, bu yapı ile:
for ( int i= 1 ; i<= OrdersTotal (); i++) // Цикл перебора ордер
{
if ( OrderSelect (i- 1 , SELECT_BY_POS )== true ) // Если есть следующий
{
if ( OrderSymbol ()!= Symb) continue ;
sonraki duruma geçmeyecektir.
çünkü emir yok ve -1 (bizim durumumuzda = 0)
Tabii ki böyle yazmak alışılmış bir şey değil ve neden olduğu da belli değil,
böyle değil:
for ( int i= 0 ; i< OrdersTotal (); i++) // Цикл перебора ордер
{
if ( OrderSelect (i, SELECT_BY_POS )== true ) // Если есть следующий
{
if ( OrderSymbol ()!= Symb) continue ;
Merhaba beyler progers, bir sorum var, kodun bir kısmını hesap bakiyesinin yüzdesini kapatmayı öğretemiyorum. kapanıyor ama yüzde değil, ama hepsi bir anda ve piyasada olan tüm emirler.Belli bir emri ve hesaplanan mevduat bakiyesinin yüzdesini kapatmam gerekiyor.Bana neyi yanlış yaptığımı söyle?
dış çift Yüzde = 2.0; dış int kayma = 2; çift durak;
Tabii ki böyle yazmak alışılmış bir şey değil ve neden olduğu da belli değil,
böyle değil:
Evet okuyunca ben de neden hemen i=0 koymuyorsunuz diye düşündüm, daha basit ve anlaşılır görünüyor.
İşte betiğin tüm kodu, bakın, belki yazarın i=1 değil de i=0 yazmamasının iyi nedenleri vardır, bu kadarını anlamıyorum ve göremiyorum, ama sadece ihtiyacım var iş mekanizmasını anlamak, böylece daha sonra soru kalmayacak
// closeorder.mq4// Предназначен для использования в качестве примера в учебнике MQL4.//--------------------------------------------------------------- 1 --int start() // Спец.функция start
{
string Symb= Symbol (); // Финанс. инструментdouble Dist= 1000000.0 ; // Предустановкаint Real_Order=- 1 ; // Пока рыночных нетdouble Win_Price= WindowPriceOnDropped (); // Здесь брошен скрипт//--------------------------------------------------------------- 2 --for ( int i= 1 ; i<= OrdersTotal (); i++) // Цикл перебора ордер
{
if ( OrderSelect (i- 1 , SELECT_BY_POS )== true ) // Если есть следующий
{ // Анализ ордеров://------------------------------------------------------ 3 --if ( OrderSymbol ()!= Symb) continue ; // Не наш фин.инструм.int Tip= OrderType (); // Тип ордераif (Tip> 1 ) continue ; // Отложенный ордер //------------------------------------------------------ 4 --double Price= OrderOpenPrice (); // Цена ордераif ( NormalizeDouble ( MathAbs (Price-Win_Price), Digits )< //ВыборNormalizeDouble (Dist, Digits )) // самого близкого орд
{
Dist= MathAbs (Price-Win_Price); // Новое значение
Real_Order=Tip; // Есть рыночный ордерint Ticket= OrderTicket (); // Номер ордераdouble Lot= OrderLots (); // Количество лотов
}
//------------------------------------------------------ 5 --
} //Конец анализа ордера
} //Конец перебора орд.//--------------------------------------------------------------- 6 --while ( true ) // Цикл закрытия орд.
{
if (Real_Order==- 1 ) // Если рыночных нет
{
Alert ( "По " ,Symb, " рыночных ордеров нет" );
break ; // Выход из цикла закр
}
//--------------------------------------------------------- 7 --switch (Real_Order) // По типу ордера
{
case0 : double Price_Cls= Bid ; // Ордер Buystring Text= "Buy " ; // Текст для Buybreak ; // Из switchcase1 : Price_Cls= Ask ; // Ордер Sell
Text= "Sell " ; // Текст для Sell
}
Alert ( "Попытка закрыть " ,Text, " " ,Ticket, ". Ожидание ответа.." );
bool Ans= OrderClose (Ticket,Lot,Price_Cls, 2 ); // Закрытие ордера//--------------------------------------------------------- 8 --if (Ans== true ) // Получилось :)
{
Alert ( "Закрыт ордер " ,Text, " " ,Ticket);
break ; // Выход из цикла закр
}
//--------------------------------------------------------- 9 --int Error=GetLastError(); // Не получилось :(switch (Error) // Преодолимые ошибки
{
case135 : Alert ( "Цена изменилась. Пробуем ещё раз.." );
RefreshRates (); // Обновим данныеcontinue ; // На след. итерациюcase136 : Alert ( "Нет цен. Ждём новый тик.." );
while ( RefreshRates ()== false ) // До нового тикаSleep ( 1 ); // Задержка в циклеcontinue ; // На след. итерациюcase146 : Alert ( "Подсистема торговли занята. Пробуем ещё.." );
Sleep ( 500 ); // Простое решениеRefreshRates (); // Обновим данныеcontinue ; // На след. итерацию
}
switch (Error) // Критические ошибки
{
case2 : Alert ( "Общая ошибка." );
break ; // Выход из switchcase5 : Alert ( "Старая версия клиентского терминала." );
break ; // Выход из switchcase64 : Alert ( "Счет заблокирован." );
break ; // Выход из switchcase133 : Alert ( "Торговля запрещена" );
break ; // Выход из switchdefault : Alert ( "Возникла ошибка " ,Error); //Другие варианты
}
break ; // Выход из цикла закр
}
//-------------------------------------------------------------- 10 --Alert ( "Скрипт закончил работу -----------------------------" );
return ; // Выход из start()
}
108 numaranızı alırsanız, maksimum değeri 151 - 108 ^ 151 \u003d 1.11426138071861e + 307'nin gücüne yükseltebilirsiniz.
108^152=1.20340229117609e+309 - MKL'de programlama için zaten çok fazla, 108^4096'dan bahsetmiyorum bile
Bu tür ölçeklere ne gibi hesaplamalar gerekiyordu?
Fiyat hareketi analitiği ve NLP dikkat yönetimini sentezlemeye çalışıyorum ve beyin otomatik pilotta :)
MQL4 öğrenmeye başladım ve bir siparişin nasıl seçildiğini anlayamıyorum
öğreticiden:
for(int i=1; i<=OrdersTotal(); i++) // Sipariş üzerinden döngü
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Sonraki Varsa
{
(OrderSymbol()!= Symb) devam ederse;
Bunu anlıyorum: i=1 için, i<= Sipariş sayısı
i-1 konumunda Seçilmiş sıra (yani sıra #0) mevcutsa
Sembolle karşılaştırın
Bundan sonra, i'ye 1(i++) ekleyin ve yeni bir yineleme başlatın
Yorumu anlayamıyorum // Bir sonraki varsa (ne demek istiyorsun: sonraki konumda mı yoksa şu anda seçili olan bu sırada mı?)
Lütfen Rusça açıklayın.
Bir arama emri varsa muhtemelen bir vvilu vardı, yani. i-1 sayısı altında var, sonra bir sonraki koşula geçiyoruz.
Her zaman sıfır sayıda (ve -1 olan) bir sipariş bulur. "Bir sonraki" sırayı belirlemenin bazı vahşi yöntemleri gerçekten yanıltıcıdır...
Her zaman sıfır sayıda (ve -1 olan) bir sipariş bulur. "Bir sonraki" sırayı belirlemenin bazı vahşi yöntemleri gerçekten yanıltıcıdır...
sipariş yoksa, bu yapı ile:
sonraki duruma geçmeyecektir.
çünkü emir yok ve -1 (bizim durumumuzda = 0)
Tabii ki böyle yazmak alışılmış bir şey değil ve neden olduğu da belli değil,
böyle değil:
Merhaba beyler progers, bir sorum var, kodun bir kısmını hesap bakiyesinin yüzdesini kapatmayı öğretemiyorum. kapanıyor ama yüzde değil, ama hepsi bir anda ve piyasada olan tüm emirler.Belli bir emri ve hesaplanan mevduat bakiyesinin yüzdesini kapatmam gerekiyor.Bana neyi yanlış yaptığımı söyle?
dış çift Yüzde = 2.0;
dış int kayma = 2;
çift durak;
OnStart() geçersiz
{
if (Rakamlar == 3 || Basamaklar == 5)
{
kayma *= 10;
}
for(int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(stop==HesapBalance()/100*Yüzde)
stop=HesapDenge()/100*Yüzde;
if(durdur<=HesapBalance())
{
OrderClose(OrderTicket(),OrderLots(),Ask,Kayma,Aqua);
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Aqua);
}//if(ostop<=AccountBalance())
}//if(ostop==AccountBalance()/100*Yüzde)
}//if (OrderSymbol() == Symbol() )
}//if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
}//for(int i = OrdersTotal()-1; i>=0; i--)
dönüş;
}//geçersiz OnStart()
//+------------------------------------------- ------------------
Bu nasıl?
ve bu:
asla yerine getirilemez
Bu yüzden:
her zaman her siparişte çalışacak.
SONUÇ: Her şey yanlış.
İşlevinin düşünülmesi gerekiyor, hızlı bir cevabım yok.
ama sadece başlamak için:
sipariş yoksa, o zaman bu yapı ile:
sonraki duruma geçmeyecektir.
çünkü emir yok ve -1 (bizim durumumuzda = 0)
Tabii ki böyle yazmak alışılmış bir şey değil ve neden olduğu da belli değil,
böyle değil:
Evet okuyunca ben de neden hemen i=0 koymuyorsunuz diye düşündüm, daha basit ve anlaşılır görünüyor.
İşte betiğin tüm kodu, bakın, belki yazarın i=1 değil de i=0 yazmamasının iyi nedenleri vardır, bu kadarını anlamıyorum ve göremiyorum, ama sadece ihtiyacım var iş mekanizmasını anlamak, böylece daha sonra soru kalmayacak