[아카이브!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 2. - 페이지 149

 
Vovo4ka :

얘들아, 실수가 어디있어, 봐 .... 그렇지 않으면 신호에서 여러 위치를 열고 때로는 신호를 놓치고 .... 쌍에서 중지 또는 이익이 트리거 된 후 새로운 것을 엽니 다 .. ..

보기... 조건: 기간 14 및 17이 있는 RSI의 동시 교차 레벨 30은 위로, 레벨 70은 아래로..


A1=diRSI1;
      A2=diRSI2;
그들은 왜 조건 뒤에 옵니까??
 
Vovo4ka :

얘들아, 실수가 어디있어, 봐 .... 그렇지 않으면 신호에서 여러 위치를 열고 때로는 신호를 놓치고 .... 쌍에서 중지 또는 이익이 트리거 된 후 새로운 것을 엽니 다 .. ..

보기... 조건: 기간 14 및 17이 있는 RSI의 동시 교차 레벨 30은 위로, 레벨 70은 아래로..


 if (( diRSI1< 30 && diRSI2< 30 )){      
         OpenBuy();
         return ( 0 );
      }

       if (diRSI1> 70 && diRSI2> 70 ){
         OpenSell();
         return ( 0 );
      }
이런식으로 하고 싶기도 하고 바로 매수가 아닌 바이스탑, 매도가 아닌 매도 스톱으로 전시되었으면 하는 바램입니다.
[삭제]  
todem :
이런식으로 하고 싶기도 하고 바로 매수가 아닌 바이스탑, 매도가 아닌 매도 스톱으로 전시되었으면 하는 바램입니다.


하... 니 방법대로 30미만이면 거래가 열린다!!!!!! 이건 말도 안 돼.... 30레벨을 아래에서 위로 넘어야 해!!!!!

그리고 가치

A1=diRSI1;
      A2=diRSI2;

이것은 단지 이전 종가의 RSI 값입니다....30보다 작아야 합니다!! 여기에서는 모든 것이 정확합니다... 저는 거래가 신호에서 여러 조각으로 열리는 이유를 이해하지 못합니다!

 
todem :
이런식으로 하고 싶기도 하고 바로 매수가 아닌 바이스탑, 매도가 아닌 매도 스톱으로 전시되었으면 하는 바램입니다.
 
Vovo4ka :


하... 니 방법대로 30미만이면 거래가 열린다!!!!!! 이건 말도 안 돼.... 30레벨을 아래에서 위로 넘어야 해!!!!!

그리고 가치

이것은 단지 이전 종가의 RSI 값입니다....30보다 작아야 합니다!! 여기에서는 모든 것이 정확합니다... 저는 거래가 신호에서 여러 조각으로 열리는 이유를 이해하지 못합니다!

그가 당신을 위해 하나의 거래를 열도록이 크로스 오버를 달성하고 싶다면 이것은 작동하지 않을 것입니다. 이것은 386 대의 컴퓨터이지만 1 초에 백만 오페라를 수행하는 훨씬 빠릅니다. 하나의 거래 개시에 대한 제어는 이미 열린 거래를 제어하여 수행됩니다.. 거래가 0개만 있으면 공개하고, 그렇지 않으면 활성화한다고 입력하십시오.
[삭제]  
todem :
그가 당신을 위해 하나의 거래를 열도록이 크로스 오버를 달성하고 싶다면 이것은 작동하지 않을 것입니다. 이것은 386 대의 컴퓨터이지만 1 초에 백만 오페라를 수행하는 훨씬 빠릅니다. 하나의 거래 개시에 대한 제어는 이미 열린 거래를 제어하여 수행됩니다.. 거래가 0개만 있으면 공개하고, 그렇지 않으면 활성화한다고 입력하십시오.


흠..그냥 백만번의 연산이 있으면 하나의 거래를 열어야지....역시 알고리즘이 그렇구나...

좋아, 스레드처럼 알아낼거야)) 트랜잭션을 제어 할 때 코드가 있으면 나에게 ... pliz))

 
Vovo4ka :


흠...그냥 요점인데 백만번의 오퍼레이션이 있다면 1번이라도 거래를 해야지.... 역시 알고리즘은 그렇구나...

좋아, 스레드처럼 알아낼거야)) 트랜잭션을 제어 할 때 코드가 있으면 나에게 ... pliz))

 int OrdCon( int nap, int MGV)
  {
     int result= 0 ;
     for ( int i= 0 ;i< OrdersTotal ();i++) {
       OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
       if ((nap== 0 ) && (OrderSymbol() == Symbol ())&& (OrderMagicNumber() == MGV)) {
        result=result+ 1 ; // открыт ордер бай 
      }
       if ((nap== 1 ) && (OrderSymbol() == Symbol ()) && (OrderMagicNumber() == MGV)) {
        result=result+ 1 ; // открытый ордер селл 
      }
    }
     return (result); // 0 means we have no trades
  }
여기 기능이 있습니다
 
todem :
여기 기능이 있습니다

       if ((nap== 0 ) && (OrderSymbol() == Symbol ())&& (OrderMagicNumber() == MGV)) {
        result=result+ 1 ; // открыт ордер бай 
      }
       if ((nap== 1 ) && (OrderSymbol() == Symbol ()) && (OrderMagicNumber() == MGV)) {
        result=result+ 1 ; // открытый ордер селл 
      }

그리고 사실 이 경우 미결제 주문이 매도 또는 매수라는 결론을 내리는 이유는 무엇입니까?

위의 전체 코드는 다음과 같습니다.

 int OrdCon( int nap, int MGV)
  {
     int result= 0 ;
     for ( int i= 0 ;i< OrdersTotal ();i++) {
       OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
       if ((nap== 0 ) && (OrderSymbol() == Symbol ())&& (OrderMagicNumber() == MGV)) {
        result=result+ 1 ; // открыт ордер бай 
      }
       if ((nap== 1 ) && (OrderSymbol() == Symbol ()) && (OrderMagicNumber() == MGV)) {
        result=result+ 1 ; // открытый ордер селл 
      }
    }
     return (result); // 0 means we have no trades
  }
 

여기에서 전문가 고문의 도움으로 RSI를 최적화했습니다.

 
//+------------------------------------------------------------------+
//|                                               20/200 expert.mq4  |
//|                                                    1H   EUR/USD  |
//|                                                    Smirnov Pavel |
//|                                                 www.autoforex.ru |
//+------------------------------------------------------------------+

#property copyright "Smirnov Pavel"
#property link       "www.autoforex.ru"

extern int TakeProfit = 20 ; // Уровень тейкпрофит в пунктах
extern int StopLoss = 200 ; // уровень стоплосс в пунктах
extern int TradeTime= 18 ;
extern int t1= 7 ;
extern int t2= 2 ;
extern int delta= 7 ;
extern int dayout= 1 ;
extern double lot = 0.1 ;

int ticket;
bool cantrade=true;

int OpenLong( double volume= 0.1 )
{
   int slippage= 10 ;
   string comment= "20/200 expert (Long)" ;
   color arrow_color= Red ;
   int magic= 0 ;

  ticket= OrderSend ( Symbol (),OP_BUY,volume,Ask,slippage,Ask-StopLoss* Point ,
                      Ask+TakeProfit* Point ,comment,magic, 0 ,arrow_color);
   if (ticket> 0 )
  {
     if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES))
    {
       Print ( "Buy order opened : " ,OrderOpenPrice());
       return ( 0 );
    }  
  }
   else 
  {
     Print ( "Error opening Buy order : " , GetLastError ()); 
     return (- 1 );
  }
}
  
int OpenShort( double volume= 0.1 )
{
   int slippage= 10 ;
   string comment= "20/200 expert (Short)" ;
   color arrow_color= Red ;
   int magic= 0 ;  
  
  ticket= OrderSend ( Symbol (),OP_SELL,volume,Bid,slippage,Bid+StopLoss* Point ,
                      Bid-TakeProfit* Point ,comment,magic, 0 ,arrow_color);
   if (ticket> 0 )
  {
     if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES))
      {
         Print ( "Sell order opened : " ,OrderOpenPrice());
         return ( 0 );
      }  
  }
   else 
  {
     Print ( "Error opening Sell order : " , GetLastError ()); 
     return (- 1 );
  }
}

int init()
{
   return ( 0 );
}

int deinit()
{   
   return ( 0 );
}

int start()
{
   if ((TimeHour( TimeCurrent ())>TradeTime)) cantrade=true;  
   // проверяем есть ли открытые ордера ...
   if ( OrdersTotal ()< 1 )
  {
     // ... если нет ни одного открытого ордера, то идем дальше
     // проверяем настало ли время для торговли
     if ((TimeHour( TimeCurrent ())==TradeTime)&&(cantrade)&&(TimeDayOfWeek( TimeCurrent ())!=dayout))
    {
       // ... если настало время, то
       if ((Open[t1]-Open[t2])>delta* Point ) //Если цена изменилась на величину delta
      {
         //условие выполнено значит входим в короткую позицию:
         // проверяем есть ли свободные деньги для открытия короткой позиции
         if (AccountFreeMarginCheck( Symbol (),OP_SELL,lot)<= 0 || GetLastError ()== 134 )
        {
           Print ( "Not enough money" );
           return ( 0 );
        }
        OpenShort(lot);
        cantrade=false; //запрещаем торговать повторно до следующего бара
         return ( 0 );
      }
       if ((Open[t2]-Open[t1])>delta* Point ) //Если цена изменилась на величину delta
      {
         // условие выполнено значит входим в длинную позицию
         // проверяем есть ли свободные деньги на счету
         if (AccountFreeMarginCheck( Symbol (),OP_BUY,lot)<= 0 || GetLastError ()== 134 )
        {
           Print ( "Not enough money" );
           return ( 0 );
        }
        OpenLong(lot);
        cantrade=false;
         return ( 0 );
      }
    }
  }   
   return ( 0 );
}
이 조언자는 어떠세요?