MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1811

 
MakarFX # :

Kütüphaneler genel olarak çalışıyor mu?

dizüstü bilgisayarın 32 biti var, kütüphane 64k'de kilitlenmiyor, internette bir yerde bu kasanın nasıl söküleceğine dair bir video gördüm, ancak orada bir şey oluştururken başlık veya başka bir şey açmanız gerekiyor. Kodu 64k'da yeniden derledim ve başlıyoruz. Pekala, 64k'da 8 baytlık bir işaretçinin zaten hastalıklı olmadığı ortaya çıktı, başka kritik farklılıklar olabilir, bu konuda sıkı oynamanız gerekiyor. Sadece hata ayıklama için 32 bitlik bir derleyici ile çalışmak istiyorum ve fikirlerim onlar için keskinleştirildi.

 
Çift 0,00134'ün neden 30'a bölünemeyeceğini söyle?
bir tamsayı çıkıyor ve ondalık noktadan sonra sonsuz -e
Yaklaşık 0.00004 olmalıdır
 
Ivan Butko # :
Çift 0,00134'ün neden 30'a bölünemeyeceğini söyle?
bir tamsayı çıkıyor ve ondalık noktadan sonra sonsuz -e
Yaklaşık 0.00004 olmalıdır
 Print ( DoubleToString ( 0.00134 / 30 ) ); 0.00004467

 
Vitaly Muzichenko # :

Vitaliy, yazdırmazsan dahili hesaplamalarda 0.00004... veya 5.666666.....-e görünecek mi?
Yoksa bir ve aynı mı?
 
Ivan Butko # :
Vitaliy, yazdırmazsan dahili hesaplamalarda 0.00004... veya 5.666666.....-e görünecek mi?
Yoksa bir ve aynı mı?

yalnızca bu, dahili hesaplamalarda görünür (sekiz baytlık bir onaltılık tam sayı)

https://ru.wikipedia.org/wiki/Double_precision_number

0.00004467 = 0x3f076b81834d51ed
 
merhaba! MT4'ten hızlı değişime kadar işlemlerin mantıklı bir kopyalayıcısını bilen var mı?
 

İyi zaman. Söylemek


Açık siparişleri kontrol etmeyen bir kod var.

Belirlenen mantığa göre emirler açar fakat emirler açar ve alım satım yapar.

 void OnTick ()
{
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
   Comment ( 
   "\n" ,                      name,
   "\n" , 
   "Символ " ,                 Symbol (),  
   "\n" ,
   "Тайм Фрейм " ,             Period (),
   "\n" ,                      AccountCompany(),
   "\n" ,
   " " ,                       AccountServer(),
   "\n" , 
   "Lots" ,                    Lot,
   "\n" ,
   "Объем в бай " ,             "BuyLots()" ,
   "\n" , 
   "Объем в сел " ,             "SellLots()" ,
   "\n" ,
   "Price " ,                  Bid,
   "\n" , 
   "Дата " ,                   TimeToString ( TimeCurrent (), TIME_DATE ),
   "\n" ,
   "Server Time " ,             TimeToString ( TimeCurrent (), TIME_SECONDS ),
   "\n" , 
   "\n" , "Процент просадки " , NormalizeDouble (  ( AccountInfoDouble ( ACCOUNT_BALANCE )- AccountInfoDouble ( ACCOUNT_MARGIN_FREE ))/ AccountInfoDouble ( ACCOUNT_BALANCE )* 100 , 
   2 ) /*, "\n" //"  CalcTP() ", CalcTP(),
,  "  t_p $ ", t_p, "  Profit() $ ", Profit(), "\n",  */ ); 
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
   /*if (CountTrades() == 0 && TypeOrder(OP_BUY) && TypeOrder(OP_SELL))
      {*/
       double body = Close[ 1 ] - Open[ 1 ];
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Buy
     if (body > 0 )
       {
        Forder = ( OrderSend ( _Symbol ,OP_BUY,Lot,Ask,iSlippage, 0 , 0 , "Коммент" ,Magic, 0 ,Blue));
         if (Forder > 0 )
          {
           Print ( "Открыта Позиция BUY" );
           if ( OrderSelect (Forder, SELECT_BY_TICKET))
             {
              TP = NormalizeDouble ((Ask+iTakeProfit* _Point ), _Digits );
               if (OrderModify(OrderTicket(),OrderOpenPrice(), 0 ,TP, 0 ))
                 Print ( "Ордер Модифицирован BUY " ); 
               else 
                 Print ( "Ошибка Модификации Ордера BUY = " , GetLastError ());
             }
          } Print ( "Ошибка Открытия Позиции BUY" );
       }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Sell      
     if (body < 0 )
       {
        Forder = ( OrderSend ( _Symbol ,OP_SELL,Lot,Bid,iSlippage, 0 , 0 , "Коммент Sell" ,Magic, 0 ,Red));
         if (Forder > 0 )
           {
             Print ( "Открыта Позиция SELL" );
             if ( OrderSelect (Forder, SELECT_BY_TICKET))
              {
               TP = NormalizeDouble ((Bid-iTakeProfit* _Point ), _Digits );
               if (OrderModify(OrderTicket(),OrderOpenPrice(), 0 ,TP, 0 ))
                   Print ( "Ордер Модифицирован SELL " ); 
               else 
                   Print ( "Ошибка Модификации Ордера SELL = " , GetLastError ());
              }
           } Print ( "Ошибка Открытия Позиции SELL" );
       }
     }  
 //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//      
   /* else 
   {
   
   }*/
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
/*}*/

Bu siparişlerle daha fazla çalışma planlanmaktadır.

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


Doğrulamayı etkinleştirirseniz siparişler istediğiniz gibi açılmaz.
Karşı emirler ne olursa olsun, ilk emrin açılıp açılmadığını kontrol etmeniz ve son emir tipi kapanana kadar aynı olanları tip bazında açmanız ve açılış şartlarını kontrol etmek için mantığa geri dönmeniz gerekiyor değil mi?

 int TypeOrder( int OrType)
{
 int count = 0 ;
   for ( int i = OrdersTotal (); i>= 0 ; i++ )
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
         {
           if (OrderSymbol() == _Symbol && OrderType() == OrType && OrderMagicNumber() == Magic)
             {
              count++;
             }
         }
     } return (count);
}

Ve nasıl işaret edileceğini anlamak yok.
Anlamama yardımcı olabilecek biri var mı?

Herhangi bir ipucu için teşekkürler.

 
Alexander Avksentyev # :

İyi zaman.

 void OnTick ()
  {
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
   Comment ( 
   "\n" ,                      name,
   "\n" , 
   "Символ " ,                 Symbol (),  
   "\n" ,
   "Тайм Фрейм " ,             Period (),
   "\n" ,                      AccountCompany(),
   "\n" ,
   " " ,                       AccountServer(),
   "\n" , 
   "Lots" ,                    Lot,
   "\n" ,
   "Объем в бай " ,             "BuyLots()" ,
   "\n" , 
   "Объем в сел " ,             "SellLots()" ,
   "\n" ,
   "Price " ,                  Bid,
   "\n" , 
   "Дата " ,                   TimeToString ( TimeCurrent (), TIME_DATE ),
   "\n" ,
   "Server Time " ,             TimeToString ( TimeCurrent (), TIME_SECONDS ),
   "\n" , 
   "\n" , "Процент просадки " , NormalizeDouble (  ( AccountInfoDouble ( ACCOUNT_BALANCE )- AccountInfoDouble ( ACCOUNT_MARGIN_FREE ))/ AccountInfoDouble ( ACCOUNT_BALANCE )* 100 , 
   2 ) /*, "\n" //"  CalcTP() ", CalcTP(), "  t_p $ ", t_p, "  Profit() $ ", Profit(), "\n",  */ ); 
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
   double body = Close[ 1 ] - Open[ 1 ];
   if (CountTrades() == 0 && body > 0 ) BuyOpen();     // Если нет открытых и сигнал бай
   if (CountTrades() == 0 && body < 0 ) SellOpen();     // Если нет открытых и сигнал селл
   if (CountTrades( 0 ) > 0 && body > 0 ) BuyOpen();     // Если есть открытые бай и сигнал бай
   if (CountTrades( 1 ) > 0 && body < 0 ) SellOpen();     // Если есть открытые селл и сигнал селл
  }  
//+------------------------------------------------------------------+
//| Подсчет открытых ордеров по типу                                 |
//+------------------------------------------------------------------+
int CountTrades( int ot=- 1 ) 
  {
   int cnt= 0 ;
   int i= OrdersTotal ()- 1 ;
   for ( int pos=i;pos>= 0 ;pos--)
     {
       if ( OrderSelect (pos,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== _Symbol )
           {
             if (OrderMagicNumber()==MagicNum)
              {
               if (OrderType()==ot||ot==- 1 ) cnt++;
              }
           }
        }
     }
   return (cnt);
  }
//+------------------------------------------------------------------+
void BuyOpen() //Открытие позиции Buy
  {
   Forder = ( OrderSend ( _Symbol ,OP_BUY,Lot,Ask,iSlippage, 0 , 0 , "Коммент" ,Magic, 0 ,Blue));
   if (Forder > 0 )
     {
       Print ( "Открыта Позиция BUY" );
       if ( OrderSelect (Forder, SELECT_BY_TICKET))
        {
         TP = NormalizeDouble ((Ask+iTakeProfit* _Point ), _Digits );
         if (OrderModify(OrderTicket(),OrderOpenPrice(), 0 ,TP, 0 ))
             Print ( "Ордер Модифицирован BUY " ); 
         else 
             Print ( "Ошибка Модификации Ордера BUY = " , GetLastError ());
        }
     }
   else Print ( "Ошибка Открытия Позиции BUY" );
  }
//+------------------------------------------------------------------+
void SellOpen() //Открытие позиции Sell  
  {
   Forder = ( OrderSend ( _Symbol ,OP_SELL,Lot,Bid,iSlippage, 0 , 0 , "Коммент Sell" ,Magic, 0 ,Red));
   if (Forder > 0 )
     {
       Print ( "Открыта Позиция SELL" );
       if ( OrderSelect (Forder, SELECT_BY_TICKET))
        {
         TP = NormalizeDouble ((Bid-iTakeProfit* _Point ), _Digits );
         if (OrderModify(OrderTicket(),OrderOpenPrice(), 0 ,TP, 0 ))
             Print ( "Ордер Модифицирован SELL " ); 
         else 
             Print ( "Ошибка Модификации Ордера SELL = " , GetLastError ());
        }
     }
   else Print ( "Ошибка Открытия Позиции SELL" );
  }
//+------------------------------------------------------------------+
 
MakarFX # :

Teşekkür ederim. Bu mantık vuruşu doğrudur, sayacı yalnızca doğru yapın ve koşulu doğru belirtin

 if (CountTrades() == 0 && body > 0 ) BuyOpen();     // Если нет открытых и сигнал бай
   if (CountTrades() == 0 && body < 0 ) SellOpen();     // Если нет открытых и сигнал селл
   if (CountTrades( 0 ) > 0 && body > 0 ) BuyOpen();     // Если есть открытые бай и сигнал бай
   if (CountTrades( 1 ) > 0 && body < 0 ) SellOpen();     // Если есть открытые селл и сигнал селл

Teşekkür ederim. Bunu halledeceğim.

 
Tretyakov Rostyslav # :

İyi zaman. Bir soru. trol var

 void Trail()
{
 if (iTrailStart <= 0.0 ) return ; 
 double tp,sl_lev;
 for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
    {
     if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES))
       {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
          {
           if (OrderType() == OP_BUY) 
             {
               if (iTrailTakeProfit > 0.0 )
                {
                tp=OrderTakeProfit() + NormalizeDouble (iTrailTakeProfit * Point (), _Digits );
                 if ( NormalizeDouble (((tp - OrderTakeProfit())) < 0.0 , Digits )) return ;
                tp = OrderTakeProfit();
                } else tp = 0.0 ;
               if (OrderProfit() + OrderSwap() + OrderCommission() > MarketInfo( Symbol (), MODE_TICKVALUE) * iTrailStart * OrderLots()) return ;
                {
                 if ( NormalizeDouble (Bid - OrderOpenPrice() <= iTrailStart * Point (), Digits )) return ;
                   {
                     if (OrderStopLoss()== 0.0 && NormalizeDouble ((Bid-OrderStopLoss()) <= iTrailDist * Point (), _Digits )) return ;
                      {
                       if (iTrailStep > 0.0 && OrderStopLoss()== 0.0 && NormalizeDouble ((Bid - OrderStopLoss() - iTrailDist * Point () < iTrailStep * Point ()), _Digits )) return ;
                        {
                         sl_lev = NormalizeDouble (Bid - iTrailDist * Point (), _Digits );
                         if ( NormalizeDouble ((Bid - sl_lev) < MarketInfo( Symbol (),MODE_STOPLEVEL) * Point , Digits )) return ;
                           {
                             if (!OrderModify(Forder,OrderOpenPrice(),OrderStopLoss() + iTrailStart * Point ,OrderTakeProfit(),OrderExpiration()))
                             Print ( "Не удалось модифицировать стоплосс ордера №" ,OrderTicket(), ". Ошибка: " , GetLastError ());
                           }
                        }
                      }
                   }
                }
             }
           if (OrderType() == OP_SELL)
             {
               if (iTrailTakeProfit > 0.0 )
                {
                 tp=OrderProfit() - NormalizeDouble (iTrailTakeProfit * Point (), _Digits );
                 if ( NormalizeDouble ((OrderTakeProfit() - tp) < 0.0 , _Digits )) return ;
                 tp = OrderTakeProfit();
                } else tp = 0.0 ;
               if (OrderProfit() + OrderSwap() + OrderCommission() > MarketInfo( Symbol (), MODE_TICKVALUE) * iTrailStart * OrderLots()) return ;
                {
                 if ( NormalizeDouble ((OrderProfit() - Ask) <= iTrailStart * Point (), _Digits )) return ;
                   {
                     if (OrderStopLoss() == 0.0 && NormalizeDouble ((OrderStopLoss() - Ask) <= iTrailDist * Point (), _Digits )) return ;
                      {
                       if (iTrailStep > 0.0 && OrderStopLoss() == 0.0 && NormalizeDouble ((OrderStopLoss() - Ask) - iTrailDist * Point (), _Digits ) < iTrailStep * Point ()) return ;
                         {
                          sl_lev = NormalizeDouble (Ask + iTrailDist * Point (), _Digits );
                           if ( NormalizeDouble ((sl_lev - Ask) > MarketInfo( Symbol (),MODE_STOPLEVEL) * Point , _Digits )) return ;
                            {
                             if (!OrderModify(Forder,OrderOpenPrice(),OrderStopLoss() + iTrailStart * Point ,OrderTakeProfit(),OrderExpiration()))
                             Print ( "Не удалось модифицировать стоплосс ордера №" ,OrderTicket(), ". Ошибка: " , GetLastError ());
}}}}}}}}}}

Danışmana ne kazanacağını nasıl söylemeli?

 void OnTick ()
  {
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
   Comment ( 
   "\n" ,                      name,
   "\n" , 
   " " ,                       Symbol (),  
   "\n" ,
   "Тайм Фрейм " ,             Period (),
   "\n" ,                      AccountCompany(),
   "\n" ,
   "\n " ,                     AccountServer(),
   "\n" , 
   "Lots\n" ,                  B_S_Lot(),
   "\n" ,
   "Price " ,                  Bid,
   "\n" , 
   "Дата " ,                   TimeToString ( TimeCurrent (), TIME_DATE ),
   "\n" ,
   "Server Time " ,             TimeToString ( TimeCurrent (), TIME_SECONDS ),
   "\n" , 
   "Profit " ,                 Profit(),
   "\n" ,
   "AvTP " ,                   CalcTP (),
   "\n" , 
   "Количество ордеров " ,     CountTrades(),
   "\n" ,
   "\n " ,                     GetVolumeLotLastOrder(),
   "\n" ,
   "\n" , "Процент просадки " , NormalizeDouble (  ( AccountInfoDouble ( ACCOUNT_BALANCE )- AccountInfoDouble ( ACCOUNT_MARGIN_FREE ))/ AccountInfoDouble ( ACCOUNT_BALANCE )* 100 , 2 )
  ); 
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
   double body = Close[ 1 ] - Open[ 1 ];
   if (CountTrades() == 0 && body > 0 ) BuyOpen();     // Если нет открытых и сигнал бай
   if (CountTrades() == 0 && body < 0 ) SellOpen();     // Если нет открытых и сигнал селл
   if (CountTrades( 0 ) > 0 && body > 0 ) BuyOpen();     // Если есть открытые бай и сигнал бай
   if (CountTrades( 1 ) > 0 && body < 0 ) SellOpen();     // Если есть открытые селл и сигнал селл
   Trail();
  }

Bu şekilde belirtildiğini gördüm, ama bir şekilde benim için çalışmıyor.

Genel olarak, sorun, işlevin çalışması için ex'i belirtmektir, bu nasıl yapılır?