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 ); }
나는 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);
}
//+----------------------------------------------- -------------------+