5 wmz için bir komut dosyası çizin. - sayfa 16

 

Ve ben sadece pozisyonların kapanmamasının nedenini arıyorum, pozisyon kapatma bloğunda, doğru olduğunda. Nasıl doğru olacak?

 

==================

Kapanış bloğunuzu silin. Doğru olan nedir...

Ve bu kodu satırın önüne yapıştırın:

if(toplam<1){ // açık pozisyon yoksa

 //============== Закрытие позиций =============================


if(total>=1){  //если "есть открытых позиций"
//----------------------------------------------------------------------
  for ( int v= 0 ; v< OrdersTotal (); v++)                             {       
      if ( OrderSelect (v, SELECT_BY_POS, MODE_TRADES))               {           
        if (OrderSymbol()== Symbol ())                                 { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { //бай позиция 
    if ( DayOfWeek()== 1  && Hour() == 22 )    {
           OrderClose(OrderTicket(),OrderLots(),Bid, 3 , Green ); // закрываем позицию
                 return ( 0 ); // выходим
                }       
     }  
 //--------------------------------------------------------
if (OrderType() == OP_SELL) { //селл позиция
      if ( DayOfWeek()== 1  && Hour() == 22 )    {
                 OrderClose(OrderTicket(),OrderLots(),Ask, 3 , Green ); // закрываем позицию
                 return ( 0 ); // выходим
                }       
     }  
 //-------------------------------------------------------                       
    }  // Symbol()  
  } // select
 } //total

} //если  "есть открытых позиций"
//============= конец блока закрытия =====================
 

Pozisyonları açarken GetLastError() hata fonksiyonunu çağırırsınız, ancak nedense kodda buna referans yok!

Neden kodumdan attın? -

//-- Подключаемые модули --
#include < stderror.mqh >
#include < stdlib.mqh >
 

test ediliyor, ancak 22 konumunda kapanmıyor. Hiçbir şeyi atmadım, bu yeni bir kod, çünkü danışman test edilmesine rağmen sizinkiyle ticaret yapmıyor.

 extern double Lots          = 0.1 ;
extern double TakeProfit    = 120 ;
extern double StopLoss      = 120 ;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int cnt, ticket, total;
   static int prevtime = 0 ;
if (Time[ 0 ] == prevtime) return ( 0 ); //если появился новый бар
   prevtime = Time[ 0 ]; // начинаем работу


//+------------------------------------------------------------------+
//|               Открытие позиций понедельника                      |
//+------------------------------------------------------------------+
if ( DayOfWeek()== 5 ){ //если сегодня вечер пятницы
if ( Hour() == 23 )  { //если - 22 часа терминального времени
// BUY
       if ( Close[ 1 ]<= Open[ 24 ] && Close[ 23 ]<=Open[ 48 ] && Close[ 47 ]<=Open[ 72 ]) {    
        
         ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 ,Bid- 40 * Point ,Ask+ 120 * Point , "Regulest" , 0 , 0 , Green );}
         if (ticket < 0 ) {
             Print ( "Ошибка открытия ордера BUY #" , GetLastError ()); 
             Sleep ( 10000 );  prevtime = Time[ 1 ];   return ( 0 ); }}
// SELL
if ( DayOfWeek()== 5 ){ //если сегодня вечер пятницы
if ( Hour() == 23 )  { //если - 22 часа терминального времени
     if ( Close[ 1 ]>= Open[ 24 ] && Close[ 23 ]<=Open[ 48 ] && Close[ 47 ]<=Open[ 72 ]) {
    
         ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 ,Ask+ 40 * Point ,Bid- 100 * Point , "Regulest" , 0 , 0 , Red );
         if (ticket < 0 ) {
             Print ( "Ошибка открытия ордера SELL #" , GetLastError ()); 
             Sleep ( 10000 );  prevtime = Time[ 1 ];   return ( 0 ); }
          } 
        }
//+------------------------------------------------------------------+
//|                     Закрытие позиций                             |
//+------------------------------------------------------------------+
if (total>= 1 ){   //если "есть открытых позиций"
//----------------------------------------------------------------------
   for ( int v= 0 ; v< OrdersTotal (); v++)                             {       
       if ( OrderSelect (v, SELECT_BY_POS, MODE_TRADES))               {           
         if (OrderSymbol()== Symbol ())                                 { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { //бай позиция 
     if ( DayOfWeek()== 1   && Hour() == 22 )    {
           OrderClose(OrderTicket(),OrderLots(),Bid, 3 , Green ); // закрываем позицию
                 return ( 0 ); // выходим
                }       
     }  
//--------------------------------------------------------
if (OrderType() == OP_SELL) { //селл позиция
       if ( DayOfWeek()== 1   && Hour() == 22 )    {
                 OrderClose(OrderTicket(),OrderLots(),Ask, 3 , Green ); // закрываем позицию
                 return ( 0 ); // выходим
                }       
     }  
//-------------------------------------------------------                       
    }   // Symbol()  
  } // select
} //total
} //если  "есть открытых позиций"

               }
       return ( 0 );
     }}
 
extern double Lots          = 0.1 ;
extern double TakeProfit    = 120 ;
extern double StopLoss      = 120 ;
//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int cnt, ticket, total;
  static int prevtime = 0 ;
if (Time[ 0 ] == prevtime) return ( 0 ); //если появился новый бар
   prevtime = Time[ 0 ]; // начинаем работу


//+------------------------------------------------------------------+
//|               Открытие позиций понедельника                      |
//+------------------------------------------------------------------+
if (total< 1 ){  //если нет открытых позиций"
if ( DayOfWeek()== 5 ){ //если сегодня вечер пятницы
if ( Hour() == 23 )  { //если - 22 часа терминального времени
//---------------------------------------------
// BUY---------------------
       if ( Close[ 1 ]<= Open[ 24 ] && Close[ 23 ]<=Open[ 48 ] && Close[ 47 ]<=Open[ 72 ]) {    
        
         ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 ,Bid- 40 * Point ,Ask+ 120 * Point , "Regulest" , 0 , 0 , Green );
         if (ticket < 0 ) {
            Print ( "Ошибка открытия ордера BUY #" , GetLastError ()); 
            Sleep ( 10000 );  prevtime = Time[ 1 ];  return ( 0 ); }
                      }
// SELL-----------------------
    if ( Close[ 1 ]>= Open[ 24 ] && Close[ 23 ]<=Open[ 48 ] && Close[ 47 ]<=Open[ 72 ]) {
    
         ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 ,Ask+ 40 * Point ,Bid- 100 * Point , "Regulest" , 0 , 0 , Red );
         if (ticket < 0 ) {
            Print ( "Ошибка открытия ордера SELL #" , GetLastError ()); 
            Sleep ( 10000 );  prevtime = Time[ 1 ];  return ( 0 ); }
          } 
//-----------------------------
    }
    }
   } // если нет открытых позиций

//+------------------------------------------------------------------+
//|                     Закрытие позиций                             |
//+------------------------------------------------------------------+
if (total>= 1 ){  //если "есть открытых позиций"
//----------------------------------------------------------------------
  for ( int v= 0 ; v< OrdersTotal (); v++)                             {       
      if ( OrderSelect (v, SELECT_BY_POS, MODE_TRADES))               {           
        if (OrderSymbol()== Symbol ())                                 { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { //бай позиция 
    if ( DayOfWeek()== 1  && Hour() == 22 )    {
           OrderClose(OrderTicket(),OrderLots(),Bid, 3 , Green ); // закрываем позицию
                 return ( 0 ); // выходим
                }       
     }  
//--------------------------------------------------------
if (OrderType() == OP_SELL) { //селл позиция
      if ( DayOfWeek()== 1  && Hour() == 22 )    {
                 OrderClose(OrderTicket(),OrderLots(),Ask, 3 , Green ); // закрываем позицию
                 return ( 0 ); // выходим
                }       
     }  
//-------------------------------------------------------                       
    }  // Symbol()  
  } // select
} //total
} //если  "есть открытых позиций"

 //
    return ( 0 );
     }

Böyle deneyin. Ve alım satım için açılış koşullarını dikkatlice kontrol edin.

( Kapat[ 1 ]>= Aç[ 24 ] && ..... ......)

 

İşin garibi, MT4 Hareketli Ortalama dağıtımının temel EA kodunu yeniden oluşturmayı başardık. Test cihazında, anlaşmalar test edilir, 22'de kapanır, danışman kendi kendine işlem yapar mı, bilmiyorum. İhtiyacınız olursa kod burada.

 //+------------------------------------------------------------------+
//|                                               Moving Average.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#define MAGICMA   20050610

extern double Lots          = 0.1 ;
extern double TakeProfit    = 120 ;
extern double StopLoss      = 120 ;

//extern double MaximumRisk        = 0.02;
//extern double DecreaseFactor     = 3;
//extern double MovingPeriod       = 12;
//extern double MovingShift        = 6;

//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders( string symbol)
  {
   int buys= 0 ,sells= 0 ;
//----
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)==false) break ;
       if (OrderSymbol()== Symbol () && OrderMagicNumber()==MAGICMA)
        {
         if (OrderType()==OP_BUY)  buys++;
         if (OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if (buys> 0 ) return (buys);
   else        return (-sells);
  }

//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   int     res;
   if (Volume[ 0 ]> 1 ) return ;
   if ( DayOfWeek()== 5 ){ //если сегодня вечер пятницы
   if ( Hour() == 23 )  { //если - 22 часа терминального времени
   if ( Close[ 1 ]>= Open[ 24 ] && Close[ 23 ]<=Open[ 48 ] && Close[ 47 ]<=Open[ 72 ]) 
     {
      res= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 ,Ask+ 40 * Point ,Bid- 100 * Point , "Regulest" ,MAGICMA, 0 , Red );
       return ;
     }}}
//---- buy conditions
   if ( DayOfWeek()== 5 ){ //если сегодня вечер пятницы
   if ( Hour() == 23 )  { //если - 22 часа терминального времени
   if ( Close[ 1 ]<= Open[ 24 ] && Close[ 23 ]<=Open[ 48 ] && Close[ 47 ]<=Open[ 72 ])   
     {
      res= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 ,Bid- 40 * Point ,Ask+ 120 * Point , "Regulest" ,MAGICMA, 0 , Blue );
       return ;
     }}}
//----
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double ma;
//---- go trading only for first tiks of new bar
   if (Volume[ 0 ]> 1 ) return ;
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)==false)         break ;
       if (OrderMagicNumber()!=MAGICMA || OrderSymbol()!= Symbol ()) continue ;
       //---- check order type 
       if (OrderType()==OP_BUY)
        {
         if ( DayOfWeek()== 1   && Hour() == 22 ) OrderClose(OrderTicket(),OrderLots(),Bid, 3 , White );
         break ;
        }
       if (OrderType()==OP_SELL)
        {
         if ( DayOfWeek()== 1   && Hour() == 22 ) OrderClose(OrderTicket(),OrderLots(),Ask, 3 , White );
         break ;
        }
     }
//----
  }
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
  {
//---- check for history and trading
   if ( Bars < 100 || IsTradeAllowed()==false) return ;
//---- calculate open orders by current symbol
   if (CalculateCurrentOrders( Symbol ())== 0 ) CheckForOpen();
   else                                     CheckForClose();
//----
  }
//+------------------------------------------------------------------+
 
leonid553 :

Böyle deneyin. Ve alım satım için açılış koşullarını dikkatlice kontrol edin.

( Kapat[ 1 ]>= Aç[ 24 ] && ..... ......)


Bunu bırak, teşekkürler, Hareketli Ortalama koduyla her şey yolunda gitti. Pazartesi günü kendisi bir işlem yapmazsa, tartışmamıza devam edeceğiz. Umarım teknik analiz yöntemim buna değmiştir, dört danışman GBPUSD, EURUSD, USDJPY, USDCHF, bir CHF'ye göre değerlendirildiğinde iyi kar getirebilir.
 
Profitabl :

İşin garibi, MT4 Moving Aviagre dağıtımının temel EA kodunu yeniden oluşturmayı başardık. Test cihazında, anlaşmalar test edilir, 22'de kapanır, danışman kendi kendine işlem yapar mı, bilmiyorum. İhtiyacınız olursa kod burada.


Ne yazık ki bu EA yalnızca test cihazında doğru şekilde çalışabilir....

Çevrimiçi - sinyallerin yarısından fazlası kaçırılacak. Bu durum nedeniyle:

 if (Volume[ 0 ]> 1 ) return ;
 

ne yapmalı, nasıl değiştirilir, belki sadece silin, çünkü Movinga parametreleri artık kodda değil

Peki Moving bu kodla tüm işlemleri nasıl gerçekleştiriyor?

tüm işlemlerin yapılması gerekir, çoğu yok, günde bir, danışmanın fiyatın açık olduğu saat 23:00'ten itibaren yarım saat içinde 20-40 deneme yapması gerekir ve pozisyon aç

bu, kodunuzla danışmanın Salı günü pozisyon açabileceği ve Perşembe ve Cuma günleri tik atlayabileceği anlamına gelir.

 
Profitabl :

ne yapmalı, nasıl değiştirilir, belki sadece silin, çünkü Movinga parametreleri artık kodda değil

Peki Moving bu kodla tüm işlemleri nasıl yapıyor?

tüm işlemlerin yapılması gerekir, çoğu yok, günde bir, danışmanın fiyatın açık olduğu saat 23:00'ten itibaren yarım saat içinde 20-40 deneme yapması gerekir ve pozisyon aç

bu, kodunuzla danışmanın Salı günü pozisyon açabileceği ve Perşembe ve Cuma günleri tik atlayabileceği anlamına gelir.

Evet, tüm bu satırları kaldırın. Danışmanınızın mantığına göre bunlara gerek yok.