Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 486

 
evillive :

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 :)
 
alex12 :
Fiyat hareketi analitiği ve NLP dikkat yönetimini sentezlemeye çalışıyorum ve beyin otomatik pilotta :)
Aydınlanma arayışında asıl mesele, çok uzağa uçmamak için doğru maddeleri seçmektir.
 

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.
 
Vladon :
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...
 
Açıklama için teşekkürler.
 
evillive :

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;

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()
//+------------------------------------------- ------------------

 
OrderClose ( OrderTicket (), OrderLots (), Ask ,Slippage,Aqua);
OrderClose ( OrderTicket (), OrderLots (), Bid ,Slippage,Aqua);

Bu nasıl?

ve bu:

 if (stop== AccountBalance ()/ 100 *Percent)
stop= AccountBalance ()/ 100 *Percent;

asla yerine getirilemez

Bu yüzden:

 if (stop<= AccountBalance ())

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:

 extern double Percent = 2.0 ;
extern int Slippage = 2 ;
double stop;

void OnStart ()
{

if ( Digits == 3 || Digits == 5 )
{
Slippage *= 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 ( OrderProfit ()>= AccountBalance ()/ 100 *Percent)

{
if ( OrderType () == OP_SELL ) OrderClose ( OrderTicket (), OrderLots (), Ask ,Slippage,Aqua);
if ( OrderType () == OP_BUY ) OrderClose ( OrderTicket (), OrderLots (), Bid ,Slippage,Aqua);
} //if(ostop<=AccountBalance())
} //if(ostop==AccountBalance()/100*Percent)
} //if (OrderSymbol() == Symbol() )
} //if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
} //for(int i = OrdersTotal()-1; i>=0; i--)
return ;
} //void OnStart()
//+-----------------------------------------------------------------
 
Vladon :


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

 // 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)                         // По типу ордера
        {
         case 0 : double Price_Cls= Bid ;           // Ордер Buy
             string Text= "Buy " ;                 // Текст для Buy
             break ;                               // Из switch
         case 1 : 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)                             // Преодолимые ошибки
        {
         case 135 : Alert ( "Цена изменилась. Пробуем ещё раз.." );
             RefreshRates ();                     // Обновим данные
             continue ;                           // На след. итерацию
         case 136 : Alert ( "Нет цен. Ждём новый тик.." );
             while ( RefreshRates ()== false )         // До нового тика
               Sleep ( 1 );                         // Задержка в цикле
             continue ;                           // На след. итерацию
         case 146 : Alert ( "Подсистема торговли занята. Пробуем ещё.." );
             Sleep ( 500 );                         // Простое решение
             RefreshRates ();                     // Обновим данные
             continue ;                           // На след. итерацию
        }
       switch (Error)                             // Критические ошибки
        {
         case 2 : Alert ( "Общая ошибка." );
             break ;                               // Выход из switch
         case 5 : Alert ( "Старая версия клиентского терминала." );
             break ;                               // Выход из switch
         case 64 : Alert ( "Счет заблокирован." );
             break ;                               // Выход из switch
         case 133 : Alert ( "Торговля запрещена" );
             break ;                               // Выход из switch
         default : Alert ( "Возникла ошибка " ,Error); //Другие варианты   
        }
       break ;                                     // Выход из цикла закр
     }
//-------------------------------------------------------------- 10 --
   Alert ( "Скрипт закончил работу -----------------------------" );
   return ;                                       // Выход из start()
  }