SSS (sık sorulan sorular) doldurma hakkında Subbotnik. Yoldaşlarımıza yardım edelim! - sayfa 13

 
Anında Yürütme ile Piyasa Yürütme arasındaki fark nedir?

( Tamsayı ): Anında İşlem ile, önceden belirlenmiş bir zarar durdur ve tey kar ile bir emir açılabilir, noktalarda izin verilen bir sapma (Kayma) belirlenir, o anki fiyat ise emir açmasına izin verilir. komisyoncu tarafından yürütülmesi, tüccarın talebinin fiyatından sapar. Piyasa Yürütme ile önceden belirlenmiş zararı durdur ve/veya kar al emri açmak mümkün değildir, izin verilen bir kayma parametresi (Slippage) yoktur. Emir, komisyoncu tarafından gerçekleştirildiği anda mevcut olan herhangi bir fiyattan açılır. Stoploss ve/veya kar al emri açıldıktan hemen sonra verilebilir. Çoğu işlem merkezi Anında Yürütme modunda çalışır. Piyasa Yürütme modunda pek çok işlem merkezi çalışmaz.
 
Gittikçe daha fazla DC, Market Execution'a geçiyor . Yakında Integer tarafından verilen bilgiler önemsiz hale gelecektir.
 
joo :
Gittikçe daha fazla DC, Market Execution'a geçiyor. Yakında Integer tarafından verilen bilgiler alakasız hale gelecektir.

Peki bu sadece iki mod hakkında bilgi.

ve SSS'de son paragraf tam olarak onun yazdığı şeydir - bir trend! https://www.mql5.com/ru/forum/131853/page3#464977

-------

Bu arada terimler sözlüğü nasıl, hastanın yaşama ihtimali daha mı yüksek?

Dosyalar:
mql4_10.zip  419 kb
 
sergeev :

1. Ve SSS'de son paragraf tam olarak onun yazdığı şeydir - bir trend! https://www.mql5.com/ru/forum/131853/page3#464977

-------

2. Bu arada terimler sözlüğü nasıl, hastanın yaşama olasılığı daha mı yüksek?

1. Bağlantıdaki SSS'deki son paragrafı görmedim, ancak yalnızca granit77 gönderisine tepki verdim.

2. Kendime yardım teklif ettiğim bölümü okudum. Ama istediğiniz kadar eksiksiz. Eklenecek pratik olarak hiçbir şey yok. Bunu daha önce bildirmeliydim - üzgünüm yapmadım.

Aynı şekilde, bölümde programcılar ve tüccarlar tarafından kullanılan jargon kısaltmalarını ekleyebilirsiniz. Geçenlerde yeni bir iş buldum ve çok az boş zamanım var, ancak bir şekilde kendi projemi sürdürmeye yetecek kadar. Bu nedenle yavaş yavaş "kağıda" yazacağım, daha fazla biriktiğinde bölüme ekleyeceğiz. TAMAM?

 
joo :

TAMAM
 

Soru: "Kendi" siparişlerinden oluşan bir dizi bilet alma

Cevap: Kodun işleyişini optimize etme açısından, bu yaklaşımı uygulamak uygundur: her şeyden önce, "bizim" emirlerimizi (bunlar belirli bir MagicNumber() ile siparişlerdir) "revize ederiz", bir dizi oluştururuz. Her bir bilet için eksiksiz bilgi içeren biletlerin sayısı ve ardından diğer tüm kontroller ( pozisyonların kapatılması ve değiştirilmesi için) aynı bilet dizisiyle gerçekleştiriyoruz.
Örnek No. 1. Bir döviz çiftindeki biletler hakkında bilgi toplama.
 // Сначала объявляем массив в глобальных переменных
double gda_Tickets[ 30 ][ 10 ]; // массив для хранения информации о "своих" ордерах:
       // gda_Tickets[][0] - Ticket
       // gda_Tickets[][1] - Type
       // gda_Tickets[][2] - Lots
       // gda_Tickets[][3] - Open Price
       // gda_Tickets[][4] - OrderProfit
       // gda_Tickets[][5] - Stop Loss
       // gda_Tickets[][6] - Take Profit
       // gda_Tickets[][7] - Open Time
       // gda_Tickets[][8] - MagicNumber
       // gda_Tickets[][9] - Expiration Time
// Не забываем о счётчике ордеров (он нам ещё понадобится)
int    gi_cnt_Tickets;
// сама функция
void fMyTickets ( double & ar_Tickets[][ 10 ], int fi_Magic = - 1 )
{
     int li_cnt = 0 ; // счетчик заполнения
     int li_total = OrdersTotal ();
//----
     for ( int li_int = li_total - 1 ; li_int >= 0 ; li_int--)
    {
         if ( OrderSelect (li_int, SELECT_BY_POS))
        {
             //---- проверка на Symbol
             if (OrderSymbol() != Symbol ()) 
            { continue ;}
             //---- проверка MagicNumber
             if (OrderMagicNumber() != fi_Magic
            && fi_Magic >= 0 ) // предусматриваем возможность контролтровать любой Magic
            { continue ;}
             //---- заполняем массив
            ar_Tickets[li_cnt][ 0 ] = OrderTicket();
            ar_Tickets[li_cnt][ 1 ] = OrderType();
            ar_Tickets[li_cnt][ 2 ] = OrderLots();
            ar_Tickets[li_cnt][ 3 ] = OrderOpenPrice();
            ar_Tickets[li_cnt][4] = OrderProfit() + OrderSwap() + OrderCommission();
            ar_Tickets[li_cnt][ 5 ] = OrderStopLoss();
            ar_Tickets[li_cnt][ 6 ] = OrderTakeProfit();
            ar_Tickets[li_cnt][ 7 ] = OrderOpenTime();
            ar_Tickets[li_cnt][ 8 ] = OrderMagicNumber();
            ar_Tickets[li_cnt][9] = OrderExpiration();
             //---- увеличим счётчик заполненных тикетов
            li_cnt++;
        }
    }   
    gi_cnt_Tickets = li_cnt;
//----
     return ;   
}

Bir amatör olarak, bu işlevi int türünde ilan edebilir ve "kendi siparişlerinin" sayısını döndürmesini sağlayabilirsiniz.

gi_cnt_Tickets = fMyTickets (gda_Tickets, Magic);

Uzman Danışmanımız çoklu para birimi ise.
Örnek No. 2. Birkaç döviz çiftindeki biletler hakkında bilgi toplama.

Bu durumda "kendi" karakterini kontrol etmek için bir küçük fonksiyona daha ihtiyacımız var:

 //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  UNI:      Получаем номер элемента в массиве string                               |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fGetNumElementInArray_STR ( string sArray[], string Element)
{
//----
     for ( int l_int = 0 ; l_int < ArraySize (sArray); l_int++)
    {
         if (sArray[l_int] == Element)
        { return (l_int);}
    }
//---- 
     return (- 1 );
} 

ve fonksiyonumuz şöyle görünecek:

 // В глобальных переменных объявляем ещё одина массив, теперь с символами с которыми работает наш мультивалютный советник
string gsa_Symbols[];
// Для использования его в советнике, нужно предварительно задать его размер и заполнить символами
// (как это сделать - отдельная тема)
// сама функция
int fMyTickets ( string ar_Symbol[],        // заполненный массив рабочих символов
                 double & ar_Tickets[][ 11 ], // массив тикетов (для заполнения)
                 int fi_Magic = -1)        // MagicNumber
{
     int NUM_Symbol, li_cnt = 0 ; // счетчик заполнения
     int li_total = OrdersTotal ();
    string ls_Sym;
//----
     for ( int li_int = li_total - 1 ; li_int >= 0 ; li_int--)
    {
         if ( OrderSelect (li_int, SELECT_BY_POS))
        {
            ls_Sym = OrderSymbol();
             //---- Определяем номер символа в массиве (фильтр по Symbol)
            NUM_Symbol = fGetNumElementInArray_STR (ar_Symbols, ls_Sym);
             //---- Если ордер не "свой" - пропускаем
             if (NUM_Symbol < 0 )
            { continue ;}
             //---- проверка MagicNumber
             if (OrderMagicNumber() != fi_Magic)
            { continue ;}
             //---- заполняем массив
            ar_Tickets[li_cnt][ 0 ] = OrderTicket();
            ar_Tickets[li_cnt][ 1 ] = OrderType();
            ar_Tickets[li_cnt][ 2 ] = OrderLots();
            ar_Tickets[li_cnt][ 3 ] = OrderOpenPrice();
            ar_Tickets[li_cnt][4] = OrderProfit() + OrderSwap() + OrderCommission();
            ar_Tickets[li_cnt][ 5 ] = OrderStopLoss();
            ar_Tickets[li_cnt][ 6 ] = OrderTakeProfit();
            ar_Tickets[li_cnt][ 7 ] = OrderOpenTime();
            ar_Tickets[li_cnt][ 8 ] = OrderMagicNumber();
            ar_Tickets[li_cnt][9] = OrderExpiration();
            //---- для дальнейших вычислений не лишним будет запомнить номер индекса символа в массиве символов
            //---- но для этого не забудьте увеличить размер массива тикетов при его объявлении gda_Tickets[30][11]
            ar_Tickets[li_cnt][10] = NUM_Symbol;
            //---- увеличим счётчик заполненных тикетов
            li_cnt++;
        }
    }   
//----
     return (li_cnt);   
}
 

Soru: "Kendi" siparişlerinden oluşan bir dizi bilet alma

Cevap: (Devam)

Uzman Danışmanınızdaki çalışmaları hakkında ek istatistiklere sahip olmak istemeniz şaşırtıcı değildir, örneğin: maksimum düşüş, toplam kâr, vb. Sunucuyu isteklerle bir kez daha "rahatsız etmemek" için, işlevimize işlevsellik eklemek uygundur (punto için üzgünüm). O zaman işlev şöyle görünebilir:

Tek para birimi danışmanı için 1 numaralı seçenek:

 // Объявляем массив в глобальных переменных
double gda_Tickets[ 30 ][ 10 ]; // массив для хранения информации о "своих" ордерах:
       // gda_Tickets[][0] - Ticket
       // gda_Tickets[][1] - Type
       // gda_Tickets[][2] - Lots
       // gda_Tickets[][3] - Open Price
       // gda_Tickets[][4] - Order Profit
       // gda_Tickets[][5] - Stop Loss
       // gda_Tickets[][6] - Take Profit
       // gda_Tickets[][7] - Open Time
       // gda_Tickets[][8] - MagicNumber
       // gda_Tickets[][9] - Expiration Time
// Добавляем массив для сбора ститистики
double gda_AddInfo[ 5 ]; // массив для хранения дополнительной информации по работе советника
       // gda_AddInfo[0] - количество соих ордеров (всех)
       // gda_AddInfo[1] - количество своих рыночных ордеров
       // gda_AddInfo[2] - общий размер открытых рыночных лотов
       // gda_AddInfo[3] - общий профит по открытым позициям
       // gda_AddInfo[4] - максимальная просадка по открытым позициям
void fMyTickets ( double & ar_Tickets[][ 10 ], // массив тикетов (для заполнения)
                 double & ar_Info[],         // массив для заполнения дополнительной информацией
                 int fi_Magic = - 1 )         // MagicNumber
{
     int li_cnt = 0 ; // счетчик заполнения
     int li_total = OrdersTotal ();
     double tmp_Loss;
//----
    tmp_Loss = ar_Info[ 4 ];
     //---- Обнуляем заполняемый массив перед использованием
     ArrayInitialize (ar_Info, 0.0 );
     for ( int li_int = li_total - 1 ; li_int >= 0 ; li_int--)
    {
         if ( OrderSelect (li_int, SELECT_BY_POS))
        {
             //---- проверка на Symbol
             if (OrderSymbol() != Symbol ()) 
            { continue ;}
             //---- проверка MagicNumber
             if (OrderMagicNumber() != fi_Magic
            && fi_Magic >= 0 ) // предусматриваем возможность контролтровать любой Magic
            { continue ;}
             //---- заполняем массив
            ar_Tickets[li_cnt][ 0 ] = OrderTicket();
            ar_Tickets[li_cnt][ 1 ] = OrderType();
            ar_Tickets[li_cnt][ 2 ] = OrderLots();
            ar_Tickets[li_cnt][ 3 ] = OrderOpenPrice();
            ar_Tickets[li_cnt][ 4 ] = OrderProfit() + OrderSwap() + OrderCommission();
            ar_Tickets[li_cnt][ 5 ] = OrderStopLoss();
            ar_Tickets[li_cnt][ 6 ] = OrderTakeProfit();
            ar_Tickets[li_cnt][ 7 ] = OrderOpenTime();
            ar_Tickets[li_cnt][ 8 ] = OrderMagicNumber();
            ar_Tickets[li_cnt][ 9 ] = OrderExpiration();
             //---- увеличим счётчик заполненных тикетов
            li_cnt++;
             //---- заполняем массив дополнительной информацией
            ar_Info[ 0 ]++;
             if (OrderType() < 2 )
            {
                ar_Info[ 1 ]++;
                ar_Info[ 2 ] += OrderLots();
                ar_Info[ 3 ] += OrderProfit() + OrderSwap() + OrderCommission();
            }
        }
    }   
     //---- Учитываем максимальную просадку
    ar_Info[ 4 ] = MathMin (ar_Info[ 3 ], tmp_Loss);
//----
     return ;   
}

Çoklu para birimi için 2. Seçenek:

 // В глобальных переменных объявляем массив, с символами, с которыми работает наш мультивалютный советник
string gsa_Symbols[];
// Массив с дополниетельной информацией должен быть 2-ух мерным
// 1-ый индекс - это номер символа в массиве символов gsa_Symbols[]
// Не забудьте перед его использованием задать ему размер в первом измерении равный количеству используемых символов
// ArrayResize (gda_AddInfo, ArraySize (gsa_Symbols));
double gda_AddInfo[][ 5 ]; // массив для хранения дополнительной информации по работе советника
       // gda_AddInfo[][0] - количество соих ордеров (всех)
       // gda_AddInfo[][1] - количество своих рыночных ордеров
       // gda_AddInfo[][2] - общий размер открытых рыночных лотов
       // gda_AddInfo[][3] - общий профит по открытым позициям
       // gda_AddInfo[][4] - максимальная просадка по открытым позициям
// Для использования его в советнике, нужно предварительно задать его размер и заполнить символами
// (как это сделать - отдельная тема)

void fMyTickets ( string ar_Symbol[],       // заполненный массив рабочих символов
                 double & ar_Tickets[][ 11 ], // массив тикетов (для заполнения)
                 double & ar_Info[][ 5 ],     // массив для заполнения дополнительной информацией
                 int fi_Magic)             // MagicNumber
{
     int NUM_Symbol, li_cnt = 0 , li_Range = ArraySize (ar_Symbol); // счетчик заполнения
     int li_total = OrdersTotal ();
     string ls_Sym;
     double tmp_Loss[];
//----
     //---- Инициализируем временный массив для хранения сведений о максимальной просадке
     ArrayResize (tmp_Loss, li_Range);
     //---- Сохраняем в него эти сведения
     for ( int li_int = 0 ; li_int < li_Range; li_int++)
    {tmp_Loss[li_int] = ar_Info[li_int][ 4 ];}
    //---- Обнуляем используемый массив
    ArrayInitialize (ar_Info, 0.0);
    for ( int li_int = li_total - 1 ; li_int >= 0 ; li_int--)
    {
         if ( OrderSelect (li_int, SELECT_BY_POS))
        {
            ls_Sym = OrderSymbol();
             //---- Определяем номер символа в массиве (фильтр по Symbol)
            NUM_Symbol = fGetNumElementInArray_STR (ar_Symbols, ls_Sym);
             //---- Если ордер не "свой" - пропускаем
             if (NUM_Symbol < 0 )
            { continue ;}
             //---- проверка MagicNumber
             if (OrderMagicNumber() != fi_Magic
            && fi_Magic >= 0 ) // предусматриваем возможность контролтровать любой Magic
            { continue ;}
             //---- заполняем массив
            ar_Tickets[li_cnt][ 0 ] = OrderTicket();
            ar_Tickets[li_cnt][ 1 ] = OrderType();
            ar_Tickets[li_cnt][ 2 ] = OrderLots();
            ar_Tickets[li_cnt][ 3 ] = OrderOpenPrice();
            ar_Tickets[li_cnt][ 4 ] = OrderProfit() + OrderSwap() + OrderCommission();
            ar_Tickets[li_cnt][ 5 ] = OrderStopLoss();
            ar_Tickets[li_cnt][ 6 ] = OrderTakeProfit();
            ar_Tickets[li_cnt][ 7 ] = OrderOpenTime();
            ar_Tickets[li_cnt][ 8 ] = OrderMagicNumber();
            ar_Tickets[li_cnt][ 9 ] = OrderExpiration();
            ar_Tickets[li_cnt][ 10 ] = NUM_Symbol;
             //---- увеличим счётчик заполненных тикетов
            li_cnt++;
             //---- заполняем массив дополнительной информацией
            ar_Info[NUM_Symbol][ 0 ]++;
             if (OrderType() < 2 )
            {
                ar_Info[NUM_Symbol][ 1 ]++;
                ar_Info[NUM_Symbol][ 2 ] += OrderLots();
                ar_Info[NUM_Symbol][ 3 ] += OrderProfit() + OrderSwap() + OrderCommission();
                ar_Info[NUM_Symbol][ 4 ] = MathMin (tmp_Loss[NUM_Symbol], ar_Info[NUM_Symbol][ 3 ]);
            }
        }
    }   
//----
     return ;   
}

Biletler hakkında bilgi toplamaya ilişkin verilen örneklerde, çoğu durumda bu bilgi yeterlidir. Ancak hiç kimse bir dizi bilette daha karmaşık sistemlerde saklamanızı yasaklamıyor, örneğin, EA'nın sanal durakları varsa, bunlarla ilgili bilgiler:

 double gda_Tickets[ 30 ][ 12 ]; // массив для хранения информации о "своих" ордерах:
       // gda_Tickets[][0] - Ticket
       // gda_Tickets[][1] - Type
       // gda_Tickets[][2] - Lots
       // gda_Tickets[][3] - Open Price
       // gda_Tickets[][4] - Order Profit
       // gda_Tickets[][5] - Stop Loss
       // gda_Tickets[][6] - Take Profit
       // gda_Tickets[][7] - Open Time
       // gda_Tickets[][8] - MagicNumber
       // gda_Tickets[][9] - Expiration Time
       // gda_Tickets[][10] - Virtual SL
       // gda_Tickets[][11] - Virtual TP

Genel olarak, burada yalnızca bir fantezi / fanatizm uçuşu ve MQL4 bilgi düzeyi ile sınırlandırılırsınız.

 

TarasBY

Sunucuyu isteklerle bir kez daha "rahatsız etmemek" için...

Siparişleri toplarken sunucu rahatsız edilmez. Bir dizide siparişler hakkında bilgi toplama ideolojisi -- UG. Bu hiçbir şekilde SSS'de yoktur.
 
TheXpert :
Siparişleri toplarken sunucu rahatsız edilmez. Bir dizide siparişler hakkında bilgi toplama ideolojisi -- UG. Bu hiçbir şekilde SSS'de yoktur.

başka bir seçenek sunun. "onların" emirleriyle çalışma ihtiyacı için
 
önermem. Çoğu zaman, bir dizi bilete hiç ihtiyaç duyulmaz. Ve en doğru şey, IMHO, her zaman terminalden en son bilgileri istemektir.
Neden: