5 wmz에 대해 하나의 스크립트를 실행합니다. - 페이지 16

 

그리고 포지션이 닫히지 않은 이유를 찾고 있는데, 포지션 클로징 블록이 맞을 때입니다. 어떻게 하면 맞을까?

 

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

닫는 블록을 삭제합니다. 뭐가 정답이야...

다음 줄 앞에 다음 코드를 붙여넣습니다.

if(total<1){ // 오픈 포지션 이 없는 경우

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


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

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

위치를 열 때 GetLastError() 오류 함수를 호출하지만 어떤 이유로 코드에 이에 대한 참조가 없습니다!

왜 내 코드에서 그것을 던졌습니까? -

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

테스트 중이지만 위치 22에서 닫히지 않습니다. 나는 아무것도 버리지 않았습니다. 이것은 고문이 테스트 중이지만 당신과 거래하지 않기 때문에 이것은 새로운 코드입니다.

 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 );
     }

이렇게 시도하십시오. 그리고 매수와 매도를 위한 오프닝 조건을 주의 깊게 확인하십시오.

( 닫기[ 1 ]>= 열기[ 24 ] && ..... ......)

 

이상하게도 우리는 MT4 이동 평균 배포판의 기본 EA 코드를 다시 만들었습니다. 테스터에서 거래가 테스트되고 22시에 마감되며 고문이 자신을 거래할지 여부는 모르겠습니다. 필요한 경우 코드가 있습니다.

 //+------------------------------------------------------------------+
//|                                               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 :

이렇게 시도하십시오. 그리고 매수와 매도를 위한 오프닝 조건을 주의 깊게 확인하십시오.

( 닫기[ 1 ]>= 열기[ 24 ] && ..... ......)


이걸 버리세요. 감사합니다. 모든 것이 이동 평균 코드로 해결되었습니다. 그가 월요일에 거래를 성사시키지 않으면 우리는 논의를 계속할 것입니다. 내 기술 분석 방법이 가치가 있기를 바랍니다. 4명의 고문 GBPUSD, EURUSD, USDJPY, USDCHF는 한 CHF로 판단하여 좋은 수익을 가져올 수 있습니다.
 
Profitabl :

이상하게도 우리는 MT4 Moving Aviagre 배포판의 기본 EA 코드를 다시 만들 수 있었습니다. 테스터에서 거래가 테스트되고 22시에 마감되며 고문이 자신을 거래할지 여부는 모르겠습니다. 필요한 경우 코드가 있습니다.


안타깝게도 이 EA는 테스터에서만 올바르게 작동합니다....

온라인 - 신호의 절반 이상이 놓칠 것입니다. 이 조건 때문에:

 if (Volume[ 0 ]> 1 ) return ;
 

어떻게 해야 하는지, 어떻게 변경하는지, 아니면 그냥 삭제해도 됩니다. Movinga 매개변수가 더 이상 코드에 없기 때문입니다.

그러나 Moving은 이 코드로 모든 트랜잭션을 어떻게 수행합니까?

모든 거래가 수행되어야하며 그 수가 많지 않고 하루에 한 번, 어드바이저가 23:00에 가격이 열린 모습부터 30분 이내에 20-40번의 시도를 해야 하고 포지션을 열다

그것은 귀하의 코드를 사용하여 고문이 화요일에 포지션을 열고 목요일과 금요일에 틱을 건너뛸 수 있음을 의미합니다

 
Profitabl :

어떻게 해야 하는지, 어떻게 변경하는지, 아니면 그냥 삭제해도 됩니다. Movinga 매개변수가 더 이상 코드에 없기 때문입니다.

그러나 Moving은 이 코드로 모든 트랜잭션을 어떻게 수행합니까?

모든 거래가 수행되어야하며 그 수가 많지 않고 하루에 한 번, 어드바이저가 23:00에 가격이 열린 모습부터 30분 이내에 20-40번의 시도를 해야 하고 포지션을 열다

그것은 귀하의 코드를 사용하여 고문이 화요일에 포지션을 열고 목요일과 금요일에 틱을 건너뛸 수 있음을 의미합니다

예, 이 줄을 모두 제거하십시오. 고문의 논리에 따르면 필요하지 않습니다.