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

 

Güzel gün. Kod yazmayı öğreniyorum ve bir sorunum var. Test cihazındaki kod başlatılır, bir işlem açılır ve bu kadar. Fiyat değişmez, her şey yerinde durur.

Kimin umurunda, lütfen tavsiye verin.

 if (CountTrades() == 0 )
   {
     double body = Close[ 1 ] - Open[ 1 ];
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Buy
     if (body > 0 )
       {
        Forder = ( OrderSend ( _Symbol ,OP_BUY,Lot,Ask,Slippage, 0 , 0 , "Коммент" ,Magic, 0 ,Blue));
        {
         Print ( "Открыта Позиция BUY" );
              {
               if (Forder > 0 )
                 {
                  TP = NormalizeDouble ((Ask+TakeProfit* _Point +OrderSwap()+OrderCommission()), _Digits );
                  Forder = OrderModify(Forder,OrderOpenPrice(), 0 ,TP, 0 );
                 } Print ( "Ордер Модифицирован BUY " );
              } Print ( "Ошибка Модификации Ордера BUY" );
        }
       } Print ( "Ошибка Открытия Позиции BUY" );
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Sell      
     if (body < 0 )
       {
        Forder = ( OrderSend ( _Symbol ,OP_SELL,Lot,Bid,Slippage, 0 , 0 , "Коммент Sell" ,Magic, 0 ,Red));
        {
         Print ( "Открыта Позиция SELL" );
              {
               if (Forder > 0 )
                 {
                  TP = NormalizeDouble ((Bid-TakeProfit* _Point +OrderSwap()+OrderCommission()), _Digits );
                  Forder = OrderModify(Forder,OrderOpenPrice(), 0 ,TP, 0 );
                 } Print ( "Ордер Модифицирован SELL " );
              } Print ( "Ошибка Модификации Ордера SELL" );
        }
       } Print ( "Ошибка Открытия Позиции Sell" );
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
   }
 
Alexander Avksentyev # :

Güzel gün. Kod yazmayı öğreniyorum ve bir sorunum var. Test cihazındaki kod başlatılır, bir işlem açılır ve bu kadar. Fiyat değişmez, her şey yerinde durur.

Kimin umurunda, lütfen tavsiye verin.

Ask+TakeProfit* _Point +OrderSwap()+OrderCommission()

Fiyata takas ve komisyon nasıl eklenir?

 
MakarFX # :

Fiyata takas ve komisyon nasıl eklenir?

Yapabildiğim ve düşündüğüm gibi)

(((Ask+TakeProfit* _Point +OrderSwap()+OrderCommission()* _Point ))

Sizce sorun bu mu?

 
OnTimer işlevinde dergide oluşturma veya yazdırma sırasında Yorumun test cihazında çalışması nasıl yapılır?
 
Alexander Avksentyev # :

Yapabildiğim ve düşündüğüm gibi)

Sizce sorun bu mu?

İlk olarak, açarken takas yoktur.

İkincisi, diyelim ki komisyon 1 dolar, pound için 1.32500 fiyatından bir emir açıyorsunuz.

(TakeProfit) 200* _Puan ve (komisyon) 1$ ekleyin, yani kazancınız 2.32700... Hangi on yılda olacak?

 
Ivan Butko cihazında çalışması nasıl yapılır?
OnTick'e bir OnTimer ekleyin
 
MakarFX # :
OnTick'e bir OnTimer ekleyin

teşekkürler

 
Alexander Avksentyev # :

Yapabildiğim ve düşündüğüm gibi)

Sizce sorun bu mu?

Hayır, bu doğru değil.


OrderModify ile daha çok.

Ayrı bir blok olarak daha iyi.

if ( OrderSelect (Forder, SELECT_BY_TICKET))
  {
  TP = NormalizeDouble ((Ask+TakeProfit* _Point ), _Digits );
   if (OrderModify(OrderTicket(),OrderOpenPrice(), 0 ,TP, 0 )
     Print ( "Ордер Модифицирован BUY " ); 
   else 
     Print ( "Ошибка Модификации Ордера BUY = " , GetLastError ());
  }
 
Alexander Avksentyev # :

Yapabildiğim ve düşündüğüm gibi)

Sizce sorun bu mu?

Sorunun bu olduğunu düşünmüyorum, bu doğru değil. Test cihazının donmasına gelince, tüm kodu düzenleyip görmek daha iyidir.

OrderCommission()* _Point

Bu da doğru değil.

_Puan - bunlar ondalık basamaklardır ve parayı hiçbir şekilde puana dönüştürmez
 
MakarFX # :

Sorunun bu olduğunu düşünmüyorum, bu doğru değil. Test cihazının donmasına gelince, tüm kodu düzenleyip görmek daha iyidir.

Bu da doğru değil.

_Puan - bunlar ondalık basamaklardır ve parayı hiçbir şekilde puana dönüştürmez
 int       Login = 4950287 ;
datetime time  = D'2022.01.01 00:00:00' ;
string    name  = "AutoP_v.3.0" ;
datetime time1 = 0 ;
double    price, TP, lastlot, minlot;
int       Forder;

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
    {
     if (AccountNumber() != Login)
       {
         int close = MessageBox ( "Неверный номер счёта" , "Ошибка" , MB_OK | MB_ICONSTOP );
         return ( INIT_FAILED );
       } else (AccountNumber() == Login);
             {
               int close = MessageBox ( "Проверка прошла успешно.Экcперт может приступить к работе." , "Инициализация" , MB_OK | MB_ICONEXCLAMATION );
             }
 //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//  
     if ( TimeCurrent () > time)
        {
         int close = MessageBox ( "Время работы закончилось!!!" , "Время работы" , MB_OK | MB_ICONSTOP );
         return ( INIT_FAILED );
        } else ( TimeCurrent () < time);
             {
               int close = MessageBox ( "Проверка времени работы прошла успешно.Эксперт может приступить к работе!" , "Время работы" , MB_OK | MB_ICONEXCLAMATION );
             }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
     if ( Digits == 3 || Digits == 5 )
       {
        TakeProfit      *= 10 ;
        TrailStart      *= 10 ;
        TrailDist       *= 10 ;
        TrailStep       *= 10 ;
        TrailTakeProfit *= 10 ;
        Step            *= 10 ;
        Slippage        *= 10 ;
       }
       return ( INIT_SUCCEEDED );
    }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
     double body = Close[ 1 ] - Open[ 1 ];
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Buy
     if (body > 0 )
       {
        Forder = ( OrderSend ( _Symbol ,OP_BUY,Lot,Ask,Slippage, 0 , 0 , "Коммент" ,Magic, 0 ,Blue));
        {
         Print ( "Открыта Позиция BUY" );
              {
               if (Forder > 0 )
                   if ( OrderSelect (Forder, SELECT_BY_TICKET))
                    {
                     TP = NormalizeDouble ((Ask+TakeProfit* _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,Slippage, 0 , 0 , "Коммент Sell" ,Magic, 0 ,Red));
        {
         Print ( "Открыта Позиция SELL" );
               if (Forder > 0 )
                 if ( OrderSelect (Forder, SELECT_BY_TICKET))
                   {
                    TP = NormalizeDouble ((Bid-TakeProfit* _Point ), _Digits );
                     if (OrderModify(OrderTicket(),OrderOpenPrice(), 0 ,TP, 0 ))
                     Print ( "Ордер Модифицирован SELL " ); 
                     else 
                     Print ( "Ошибка Модификации Ордера SELL = " , GetLastError ());
                   }
         }
        } Print ( "Ошибка Открытия Позиции BUY" );}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester ()
  {
//---
   double ret= 0.0 ;
//---

//---
   return (ret);
  }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
int CountTrades()
{
 int count = 0 ;
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i++ )
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
         {
           if (OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
             {
              count++;
             }
         }
     } return (count);
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//


Hepsi bu. Yardım için teşekkürler.