[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 361

 
veti-k :

Hayır, bu zaten çok fazla.. En az 20-50 pipten hangisi daha volatil
USD/JPY
 

Çocuklar, söyleyin:

Danışmanı, döviz çiftlerinde MT4 teslimatına dahil olan standart göstergeler üzerinde test ederken, soru sorulmaz - her şey ticaret algoritmasına göre çalışır.

Metaller üzerinde test yaparken: gümüş, altın - siparişler açılmıyor, test cihazının "Günlüğü" nde yazıyor - sıfıra bölme.

İçinde. parametreler aynıdır, test edilen cihazlar için bu beş haneli DC (Forex4) üzerindeki geçmiş yüklenir.

Olası sebep nedir? Lütfen telepatlara göndermeyin. Uzman Danışman, ders kitabının versiyonuna göre şahsen tarafımdan yazılmıştır.

 
Roman. :

Çocuklar, söyleyin:

Danışmanı, döviz çiftlerinde MT4 teslimatına dahil olan standart göstergeler üzerinde test ederken, soru sorulmaz - her şey ticaret algoritmasına göre çalışır.

Metaller üzerinde test yaparken: gümüş, altın - siparişler açılmıyor, test cihazının "Günlüğü" nde yazıyor - sıfıra bölme.

İçinde. parametreler aynıdır, test edilen cihazlar için bu beş haneli DC (Forex4) üzerindeki geçmiş yüklenir.

Olası sebep nedir? Lütfen telepatlara göndermeyin. Uzman Danışman, ders kitabının versiyonuna göre şahsen tarafımdan yazılmıştır.

Bir değişken tarafından herhangi bir bölme için, önce sıfıra eşit olup olmadığını kontrol etmelisiniz.
 
Roman. :

Çocuklar, söyleyin:

Danışmanı, döviz çiftlerinde MT4 teslimatına dahil olan standart göstergeler üzerinde test ederken, soru sorulmaz - her şey ticaret algoritmasına göre çalışır.

Metaller üzerinde test yaparken: gümüş, altın - siparişler açılmıyor, test cihazının "Günlüğü" nde yazıyor - sıfıra bölme.

İçinde. parametreler aynıdır, test edilen cihazlar için bu beş haneli DC (Forex4) üzerindeki geçmiş yüklenir.

Olası sebep nedir? Lütfen telepatlara göndermeyin. Uzman Danışman, ders kitabının versiyonuna göre şahsen tarafımdan yazılmıştır.


Yani koda bakmak için. Genel olarak, (Notepad ++ programında) kodda bölme işaretinin gerçekleştiği tüm yerleri otomatik olarak işaretleyebilir ve bazı durumlarda sıfıra bölmenin gerçekten gerçekleşip gerçekleşmediğini görebilirsiniz.
 
drknn :

Yani koda bakmak için. Genel olarak, (Notepad ++ programında) kodda bölme işaretinin gerçekleştiği tüm yerleri otomatik olarak işaretleyebilir ve bazı durumlarda sıfıra bölmenin gerçekten gerçekleşip gerçekleşmediğini görebilirsiniz.


Evet, zaten bakıyorum, her şeyi baskılarla kapladım, çıktının ulaştığı yere, her şey yolunda, yani ...

Metaller için hacim normalleştirme işlevinde bu hata vardı (sıfıra bölme), şu anda orada değil, başka bir 131 ortaya çıktı - yanlış hacim açıkça ayarlanmış olmasına rağmen = 0.01 lot, genel olarak bakıyorum ...

Para birimleri için bu hacim normalleştirme işlevi düzgün çalışıyor .... Belki onlar için ortak bir tane var (metaller ve para birimleri için)?

 //--------------------------------------------------------------------
// Lot_MM.mqh
// 
//--------------------------------------------------------------- 1 --
// Функция вычисления количества лотов.
// Глобальные переменные:
// double Lots_New - количество лотов для новых ордеров (вычисляется)
// double Lots     - желаемое количество лотов, заданное пользовател.
// double  MaksRisk  - процент риска
// Возвращаемые значения:
// true  - если средств хватает на минимальный лот
// false - если средств не хватает на минимальный лот
//--------------------------------------------------------------- 2 --
bool Lot_MM()                             // Позовательская ф-ия
  {
   int time, ticket;                   // Наибольшее время открытия и номер ордера
   double orderLots;                   // Lots   
   double orderProfit;                 // Profit
   double Price;                       // Цена открытия рыночного ордера
   double SL;                         // Значение StopLoss ордера
   double   TP;                         // Значение TakeProfit ордера
   string Symb   = Symbol ();                     // Финансовый инструм.
   double One_Lot= MarketInfo (Symb,MODE_MARGINREQUIRED); //Размер свободных средств, необходимых для открытия 1 лота
   double Min_Lot= MarketInfo (Symb,MODE_MINLOT); // Мин. размер. лотов
   double Max_Lot = MarketInfo ( Symbol (),MODE_MAXLOT);
   double Step   = MarketInfo (Symb,MODE_LOTSTEP); //Шаг изменен размера
   double Free   = AccountFreeMargin ();         // Свободные средства
   double LotVal = MarketInfo ( Symbol (),MODE_TICKVALUE); //стоимость 1 пункта для 1 лота
   

//--------------------------------------------------------------- 3 --
   if (Lots> 0 )                                 // Лоты заданы явно..
{                                               // ..проверим это
       double Money=Lots*One_Lot;               // Стоимость открываемого ордера   
       if (Money<= AccountFreeMargin ())             // Средств хватает..     
         {  
          Lots_New=Lots;                           // ..принимаем заданное
             // else                                     // Если не хватает..
             // Lots_New=MathFloor(Free/One_Lot/Step)*Step;// Расчёт лотов 
             Print ( "Функция Lot_MM: Lots_New  = " , Lots_New);    
...
...
...
...
 // ---------НОРМАЛИЗУЕМ НОВЫЕ РАСЧЕТНЫЕ ЛОТЫ И ОТКРЫВАЕМ ОЧЕРЕДНУЮ ПОЗИЦИЮ...            
                    Lots_New = NormalizeLots(Lots_New);  
   return (true);                               // Выход из польз. ф-ии
  }
//--------------------------------------------------------------- 6 --

//+------------------------------------------------------------------+
//| Нормализация лота                                                |
//+------------------------------------------------------------------+

double NormalizeLots( double lot)
{
   double lotStep = MarketInfo ( Symbol (), MODE_LOTSTEP);
   double lots = NormalizeDouble (lot / lotStep, 0 ) * lotStep;   
   lots = MathMax (lots, MarketInfo ( Symbol (), MODE_MINLOT));
   lots = MathMin (lots, MarketInfo ( Symbol (), MODE_MAXLOT));   
   return (lots);
}
 

Anlayamıyorum: en üst satırı yazdırıyor, ancak sipariş yanlışlıkla açılmıyor No. 131 - hacim doğru değil, zaten hem 0.1 hem de 0.01'i açıkça ayarladım ...

 Print ( "Функция открытия ордера с рынка - продажа: Teeth = " ,   NormalizeDouble (Teeth, Digits ), " upfractal = " , upfractal, " Цена Bid = " , NormalizeDouble (Bid, Digits ), " Lots_New = " , NormalizeDouble (Lots_New, 2 ));                
Ticket= OrderSend ( Symbol (), 1 , 0.01 ,Bid, 50 , 0 , 0 , "Antiunity-start" ,Magic, 0 , Red );    

 
Techno :
Bir değişken tarafından herhangi bir bölme için, önce sıfıra eşit olup olmadığını kontrol etmelisiniz.

Teşekkürler, bunu aklımda tutacağım. Sadece bu sefer hazır bir ses normalleştirme işlevi aldım.
 

İşe yaramazken... Aynı hatayı yazar...

 Print ( "Функция открытия ордера с рынка - продажа: Teeth = " ,   NormalizeDouble (Teeth, Digits ), " upfractal = " , upfractal, " Цена Bid = " , NormalizeDouble (Bid, Digits ), " Lots_New = " , NormalizeDouble (Lots_New, 2 ));                
          Ticket= OrderSend ( Symbol (), 1 ,Lots_New,Bid, 50 , 0 , 0 , "Antiunity-start" ,Magic, 0 , Red );            
           Print ( "Функция открытия ордера с рынка - продажа: старт" );      

10.000 test cihazındaki hesapta, altın ve 0,01 ve 0,1 ve 1 lot üzerinde bir pozisyon açıldı - işe yaramaz.

Belki birisi benzer bir sorunla karşılaştı? Lütfen söyle...

 

Özel rutinlerinize lot kontrolü işlevi ekleyin. Ve onu her OrderSend()'den önce çağırın. Benim dll'mde yuvarlama matematik kurallarına göre yapılır: yuvarlanacak sayı kesirli kısımda >=5 şeklinde bitiyorsa yukarı yuvarlanır. Peki ve buna göre, <=4 aşağı yuvarlanır. Anladığım kadarıyla, programlama dillerinde nedense bununla ilgili sorunlar var - kendi dll'mi şekillendirmem gerekiyordu. Genel olarak, kod çok basittir, ancak bir zamanlar en uygun çözümü bulmadan önce internette çok fazla araştırma yaptım. Bir dll kaynağına mı ihtiyacınız var?

 // ============ ProverkaLota() =====================================================================
// функция принимает нормализует лот ордера
//-----------------------------------------------------
double ProverkaLota( double LotOrdera, string SMB){
   double SMB_MinLot= MarketInfo (SMB,MODE_MINLOT);
  double SMB_MaxLot= MarketInfo (SMB,MODE_MAXLOT);
   double SMB_LotStep= MarketInfo (SMB,MODE_LOTSTEP);
  LotOrdera=OkruglenieDoSotykh(LotOrdera); // округляем до сотых

 if (SMB_LotStep== 0.1 ){ // округляем до десятых
   LotOrdera/= 10 ;
   LotOrdera=OkruglenieDoSotykh(LotOrdera);
   LotOrdera*= 10 ; // возвращаем дробную часть ордера на место
 }
  if (LotOrdera<SMB_MinLot){
   LotOrdera=SMB_MinLot;
 }
  if (LotOrdera>SMB_MaxLot){
   LotOrdera=SMB_MaxLot;
 }
  return (LotOrdera);
}
// =================================================================================================
Dosyalar:
basic_dll_1.zip  190 kb
 
drknn :

Özel rutinlerinize lot kontrolü işlevi ekleyin. Ve onu her OrderSend()'den önce çağırın. Benim dll'mde yuvarlama matematik kurallarına göre yapılır: yuvarlanacak sayı kesirli kısımda >=5 şeklinde bitiyorsa yukarı yuvarlanır. Peki ve buna göre, <=4 aşağı yuvarlanır. Anladığım kadarıyla, programlama dillerinde nedense bununla ilgili sorunlar var - kendi dll'mi şekillendirmem gerekti. Genel olarak, kod çok basittir, ancak bir zamanlar en uygun çözümü bulmadan önce internette çok fazla araştırma yaptım. Bir dll kaynağına mı ihtiyacınız var?


Evet. Teşekkür ederim.