이치모쿠 전략

 

나는 tenkan-sen>kijun-sen (tenkan-sen 라인이 Kijun-sen 라인 위에있을 때) 1 단위를 자동으로 구매 한 다음 tenkan-sen이되면 판매하는 전문가 고문을 만들려고했습니다. 기준선보다 낮다.

나는 완전한 초보자이며 어제 샘플을 함께 조각하려고 시도하여 시작했습니다.

아래는 결과이며 아마도 쓰레기가 많을 것이라는 점에 감사드립니다.

컴파일을 시도할 때 int start() 행(내비게이터의 "trade" 스크립트에서 복사)에 고전적인 "'(' - 함수 정의가 예기치 않음"이 표시됨)

이 아이디어가 어떻게 작동하는지 제안하고 미리 감사드립니다.


# 재산권 "#저작권#"
#속성 링크 "#링크#"

extern 이중 랏 = 0.1;
extern 이중 Tenkan = 9;
extern 더블 기준 = 26;

//+----------------------------------------------- -------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- -------------------+
정수 초기화()
{
바<=텐칸, 바<=기준;
//----
if(막대<=텐칸>막대<=기준)
{
인쇄("기준선보다 큰 텐칸선");
리턴(0);
}
//----
//+----------------------------------------------- -------------------+
//| 스크립트 "모든 돈을 위해 거래" |
//+----------------------------------------------- -------------------+
정수 시작()
{
//----
if(MessageBox("ASK 가격으로 1.00 "+Symbol()+"를 구매하시겠습니까? ",
"스크립트",MB_YESNO|MB_ICONQUESTION)!=IDYES) return(1);
//----
int 티켓=OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"전문가 의견",255,0,CLR_NONE);
if(티켓<1)
{
정수 오류=GetLastError();
Print("오류 = ",ErrorDescription(오류));
반품;
}
//----
주문인쇄();
리턴(0);
}
//+----------------------------------------------- -------------------+

//+----------------------------------------------- -------------------+
//| 전문가 초기화 해제 기능 |
//+----------------------------------------------- -------------------+
정수 초기화()
{
바<=텐칸, 바<=기준;
//----
if(막대<=텐칸<막대<=기준)
{
인쇄("기준선 미만 텐칸선");
리턴(0);
}
//----
정수 시작()
{
//----
if(MessageBox("1.00 "+Symbol()+"를 입찰 가격으로 판매하시겠습니까? ",
"스크립트",MB_YESNO|MB_ICONQUESTION)!=IDYES) return(1);
//----
int ticket=OrderSend(Symbol(),OP_SELL,1.0,Bid,3,0,0,"전문가 의견",255,0,CLR_NONE);
if(티켓<1)
{
정수 오류=GetLastError();
Print("오류 = ",ErrorDescription(오류));
반품;
}
//----
주문인쇄();
리턴(0);
}
//+----------------------------------------------- -------------------+

 

MACD 샘플 코드를 보십시오.

Ichmoku 표시기 값을 가져오려면 내부 MACD별 사용 표시기에 대해 가져온 변수를 변경합니다.

약간의 변경을 수행한 다음 코드를 컴파일하여 구문이 올바른지 확인하십시오.

편집 - 여기에서 Ichmoku 표시기를 사용하는 방법도 사용됩니다.

 

안녕하세요 토바입니다.

세개;

1 x init, 1 x deinit + 1 x start만 있어야 합니다.

시작 기능 은 시장 움직임(또는 틱)을 처리하는 스크립트의 본체입니다.

뿐만 아니라 모든 중괄호가 제대로 닫혀 있는지 확인하고 모든 변수를 선언합니다.

 
Ickyrus :

MACD 샘플 코드를 보십시오.

Ichmoku 표시기 값을 가져오려면 내부 MACD별 사용 표시기에 대해 가져온 변수를 변경합니다.

약간의 변경을 수행한 다음 코드를 컴파일하여 구문이 올바른지 확인하십시오.

편집 - 여기에서 Ichmoku Indicator를 사용하는 방법도 사용됩니다.


좋아, MACD 샘플을 기반으로 다시 작성했지만 다음 오류가 있습니다.

'\end_of_program' - 끝 괄호 '}' 예상 C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)

'\end_of_program' - 불균형 왼쪽 괄호 C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)


이것은 새 버전입니다:

//+----------------------------------------------- -------------------+
//| ICHIMOKU.mq4 |
//| Copyright © 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+----------------------------------------------- -------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#속성 링크 "http://www.metaquotes.net"

외부 이중 TakeProfit = 50;
extern 이중 랏 = 0.1;
외부 이중 TrailingStop = 30;
extern 이중 Tenkan = 9;
extern 더블 기준 = 26;

//+----------------------------------------------- -------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- -------------------+
정수 시작()
{
더블텐칸센;
더블기준_센;
int cnt, 티켓, 합계;
//----
if(막대<100)
{
Print("100개 미만의 막대");
리턴(0);
}
if(테이크프로핏<10)
{
Print("TakeProfit이 10 미만입니다.");
리턴(0); // TakeProfit 확인
}
//----
총계=주문총계();
if(총<1)
{
// 미결 주문이 식별되지 않음
if(AccountFreeMargin()<(1000*Lots))
{
Print("돈이 없습니다. Free Margin = ", AccountFreeMargin());
리턴(0);
}
// 롱포지션(BUY) 가능성 확인
if(tenkan_sen>kijun_sen)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"ichimoku",16384,0,Green);
if(티켓>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("구매 주문이 열렸습니다: ",OrderOpenPrice());
}
else Print("구매 주문 열기 오류: ",GetLastError());
리턴(0);

// 시장에 올바르게 진입하는 것이 중요하며,
// 하지만 올바르게 종료하는 것이 더 중요합니다...
for(cnt=0;cnt<전체;cnt++)
{
주문 선택(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // 열린 위치 확인
OrderSymbol()==Symbol()) // 기호 확인
{
if(OrderType()==OP_BUY) // 롱 포지션 오픈
{
// 닫아야 하나?
if((tenkan_sen<kijun_sen)
{
OrderClose(OrderTicket(),OrderLots(), 입찰, 3, 보라색); // 닫기 위치
리턴(0); // 출구
}
// 후행 정지 확인
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
리턴(0);
}
}
}
}
}
}
리턴(0);
}


 

이 시점에서 "귀하의" 코드 . . .

}
else Print ( "Error opening BUY order : " , GetLastError ()); 
return ( 0 ); 

                       //   <------  here  ! ! ! 

// it is important to enter the market correctly, 
// but it is more important to exit it correctly... 
for (cnt= 0 ;cnt<total;cnt++)
{

. . . 여기에 표시 ! ! ! , 주문을 완료하는 것으로 전환했습니다. . . 하지만 코드의 구매 부분에서 2개의 닫는 중괄호가 누락되었습니다. . . 합리적인 방식으로 코드를 들여쓰면 쉽게 볼 수 있습니다.

 

알았어 고마워. 나는 '\end_of_program' - 끝 괄호 '}' 예상 C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)를 제거하는 이 변경을 했습니다.

<=======로 표시됩니다.

// 롱포지션(BUY) 가능성 확인
if(tenkan_sen>kijun_sen)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"ichimoku",16384,0,Green);
if(티켓>0)
} <=======
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(" 구매 주문 이 열렸습니다 : ",OrderOpenPrice());
}
else Print("구매 주문 열기 오류: ",GetLastError());
리턴(0);
}
// 시장에 올바르게 진입하는 것이 중요하며,

// 하지만 올바르게 종료하는 것이 더 중요합니다...


그래도 있어야 할 것 같진 않다.

 

이 라인에 잉여 여는 브래킷이 있습니다. . .

 if   ( ( tenkan_sen<kijun_sen )   // <--  surplus  (
 
이것을 사용하여 코드를 게시하십시오. . . 읽기 쉽게 만듭니다.

 

이러한 변수를 초기화하지만 값을 제공하지 않습니다. . .

 if (  tenkan_sen  > kijun_sen  )

. . . 따라서 테스트는 항상 거짓입니다. 이 EA는 주문을 하지 않습니다.

 

들여쓰기가 있고 컴파일되는 버전의 코드입니다. . .

 //+------------------------------------------------------------------+
//| ICHIMOKU.mq4                                                     |
//| Copyright © 2012, MetaQuotes Software Corp.                      |
//| http://www.metaquotes.net                                        |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

extern double TakeProfit = 50 ;
extern double Lots = 0.1 ;
extern double TrailingStop = 30 ;
extern double Tenkan = 9 ;
extern double Kijun = 26 ;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int start()
   {
   double tenkan_sen;
   double kijun_sen;
   int cnt, ticket, total;
   //----
   if ( Bars < 100 )
      {
       Print ( "bars less than 100" );
       return ( 0 ); 
      }
   
   if (TakeProfit< 10 )
      {
       Print ( "TakeProfit less than 10" );
       return ( 0 ); // check TakeProfit
      }

   //----
   total= OrdersTotal ();
   if (total< 1 ) 
      {
       // no opened orders identified
       if ( AccountFreeMargin ()<( 1000 *Lots))
         {
         Print ( "We have no money. Free Margin = " , AccountFreeMargin ());
         return ( 0 ); 
         }
       // check for long position (BUY) possibility
       if (tenkan_sen>kijun_sen)
         {
         ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 , 0 ,Ask+TakeProfit* Point , "ichimoku" , 16384 , 0 , Green );
         if (ticket> 0 )
            {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "BUY order opened : " , OrderOpenPrice ());
            }
         else Print ( "Error opening BUY order : " , GetLastError ()); 
         return ( 0 ); 
         
         }   //  added by RaptorUK
      }   //  added by RaptorUK
            
   // it is important to enter the market correctly, 
   // but it is more important to exit it correctly... 
   for (cnt= 0 ;cnt<total;cnt++)
      {
       OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
       if ( OrderType ()<=OP_SELL && // check for opened position 
         OrderSymbol ()== Symbol ()) // check for symbol
         {
         if ( OrderType ()==OP_BUY) // long position is opened
            {
             // should it be closed?
             if (tenkan_sen<kijun_sen)   //  removed surplus (  RaptorUK
               {
               OrderClose ( OrderTicket (), OrderLots (),Bid, 3 , Violet ); // close position
               return ( 0 ); // exit
               }
                  
             // check for trailing stop
             if (TrailingStop> 0 ) 
               { 
               if (Bid- OrderOpenPrice ()> Point *TrailingStop)
                  {
                   if ( OrderStopLoss ()<Bid- Point *TrailingStop)
                     {
                     OrderModify ( OrderTicket (), OrderOpenPrice (),Bid- Point *TrailingStop, OrderTakeProfit (), 0 , Green );
                     return ( 0 );
                     }
                  }
               }
            }
         }
      }
   return ( 0 );
   }
 
매우 감사합니다 :)