코딩하는 방법? - 페이지 206

 

외부 *.set 파일 사용

나는 시도하고 시도했지만 이것을 알아낼 수 없으므로 누군가가 여기 숲을 통해 나무를 볼 수 있기를 바랍니다.

프로그래밍된 설정을 사용하거나 외부 *.set 파일을 사용하도록 EA를 프로그래밍하고 싶습니다.

그래서 만약:

extern 부울 UseExternSet = true;

프로그래밍된 설정이 아닌 외부 설정 파일의 설정을 사용합니다.

할 수 있지만 여기에서 간단하게 잃어버린 것을 알 수 있습니다.

모든 ea 예제가 할 것입니다

남자 이름

 

컴파일러 문제 또는 코드 문제?

extern int ma1period=5;

extern int ma1method=1;

extern int ma1tf=0;

extern int ma2period=5;

extern int ma2method=1;

extern int ma2tf=10080;

extern double lots=1;

int init(){}

int deinit(){}

double CMA (int tf,int period, int shift, int method)

{

double MA=iMA(NULL,tf,period,0,method,0,shift)

return(MA)

}

int start()

{

int BarsCount=0;

if (Bars> BarsCount)

{

BarsCount=Bars;

double ma1.1=CMA(ma1tf,ma1period,1,ma1method);

double ma1.2=CMA(ma1tf,ma1period,2,ma1method);

double ma2.1=CMA(ma2tf,ma2period,1,ma2method);

double ma2.2=CMA(ma2tf,ma2period,2,ma2method);

bool ma1upsignal =ma1.2<ma1.1;

bool ma1downsignal =ma1.2>ma1.1;

bool ma2upsignal =ma2.2<ma2.1;

bool ma2downsignal =ma2.2>ma2.1;

if (ma1upsignal&&ma2upsignal)

{

OrderSend(Symbol(),OP_BUY,lots,Ask,3,NULL,NULL,NULL,NULL,0,Green);

}

if (ma1downsignal&&ma2downsignal)

{

OrderSend(Symbol(),OP_SELL,lots,Bid,3,NULL,NULL,NULL,NULL,0,Green);

}

if ((ma1upsignal&&ma2downsignal)||(ma1downsignal&&ma2upsignal))

{

int total=OrdersTotal(); //Script to close all open orders.

for(int i=total-1;i>=0;i--)

{

OrderSelect(i, SELECT_BY_POS);

int type = OrderType();

switch(type)

{

//Close opened long positions

case OP_BUY : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );

break;

//Close opened short positions

case OP_SELL : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );

}

}

}

}

이것은 내가 작업하고 있는 코드 조각입니다. 컴파일러는 "변수 BarsCount가 정의되지 않았습니다"라고 말합니다. 내가 무엇을 합니까? 내가 볼 수 있는 한 변수가 초기화되고 값이 지정되었습니다.

내 컴파일러 문제입니까 아니면 코드 문제입니까?

파일:
capture2_1.png  12 kb
 

[암호]

이중 CMA(int tf,int period, int shift, int 메서드)

{

이중 MA=iMA(NULL,tf,기간,0,메서드,0,시프트) ;

반환(MA) ;

}

 
username1:
[암호]

이중 CMA(int tf,int period, int shift, int 메서드)

{

이중 MA=iMA(NULL,tf,기간,0,메서드,0,시프트) ;

반환(MA) ;

}

미셸,

감사해요. 문제가 해결되었습니다. :-)

 

연속 막대 계산

연속 구매/판매 막대를 연속으로 계산하는 방법에 대한 코드가 있는 사람이 있습니까? 차트에 몇 번이나 셀 수 있는지 계산하고 싶습니다(확인할 막대 수 입력) 연속으로 1개의 판매 막대, 연속으로 32개의 판매 막대, 연속으로 3개의 판매 막대, 연속으로 4개의 판매 막대(동일 구매) 등

나는 그것을 반복해야한다는 것을 알고 있지만 방법을 잘 모르겠습니다.

결과는 Comment()에 들어갈 수 있습니다.

감사해요.

 

내 프로그램이 작동하지 않는 이유는 무엇입니까?

간단한 프로그램을 작성했습니다.

한 번에 하나의 주문만 입력하고 이익실현 또는 손절매로 종료해야 합니다.

GBPUSD의 M30용으로 설정되어 있습니다.

즉, prog의 sed 상수 중 일부는 "eyeball" 추정치에 의해 발견됩니다. 이것은 프로그램에 큰 영향을 미치지 않아야 합니다... 또한 다른 상수로 작동하지 않습니다. (적어도 Strategy Tester 로 테스트할 때 "tick by tick"이 아닌 fast 또는 medium으로 설정합니다. (너무 느림...)

어쨌든 prog는 테스트할 때 주문을 입력하지 않으며 절대 입력하지 않습니다! "위" 방향으로 확인하십시오. (이것은 "인쇄"/추적을 통해)

(확인해야 합니다: enter w/ buy or enter w/ Sell)

부수적 논리: 2개의 연속 막대를 확인합니다. 막대 1에 더 높은 고점과 더 높은 저점이 있으면 prog는 다음 막대가 올라갈 것이라고 생각합니다.

(아래로 대칭입니다.)

이익실현 및 손절매는 그에 따라 설정됩니다.

"if"문이 중첩되었을 때도 prog가 작동하지 않았습니다....

봐주셔서 감사합니다.

//+----------------------------------------------- -------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- -------------------+

정수 초기화()

{

//----

//----

리턴(0);

}

//+----------------------------------------------- -------------------+

//| 전문가 초기화 해제 기능 |

//+----------------------------------------------- -------------------+

정수 초기화()

{

//----

//----

리턴(0);

}

//+----------------------------------------------- -------------------+

//| 전문가 시작 기능 |

//+----------------------------------------------- -------------------+

정수 시작()

{

//----

bool TrendUp1; 이중 TakeProfitUp; 이중 EE = .00500;

bool OrdTot_OK;더블 로트;더블 슬립;

더블 SL_Trailing_Up;bool High2Up;bool Low2Up;

int ticketup;int ticketdown;bool DownAndBig; 부울 UpAndBig;

bool TrendDown; 이중 SL_Trailing_Down; 이중 TakeProfitDown;

부울 High2down; 부울 Low2down;

정수 ABC = OrdersTotal();

더블 Size1 = .00630;bool BigUp; 이중 A = 높음[1]; 이중 B= 낮음[2];//41

이중 C= 높음[2]; 이중 D= 낮음[1];bool BigDown;

//------------------------다운 주문 시작

if (ABC == 0)// 어떤 주문도 참이 아님

OrdTot_OK = 참;

if (ABC == 0)// 어떤 주문도 참이 아님

인쇄("다운 주문 순서에서 주문이 나오지 않았습니다");

if ((CD) > Size1)//높은 2보다 작은 1 > .0063

빅다운 = 사실;

if ((CD) > Size1)//높은 2보다 작은 1 > .0063

인쇄("하향 주문 시퀀스에서 큰 고장을 찾았습니다");

if (높음[1]< 높음[2])

High2down=참;

if (높음[1]< 높음[2])

인쇄("하향 순서에서 연속 막대가 감소하는 고점을 가짐");

if(낮음[1]< 낮음[2])

Low2down=참;

if(낮음[1]< 낮음[2])

인쇄("하향 순서에서 연속 막대가 감소하는 최저값");

if (High2down && Low2down)

TrendDown=참;

if (High2down && Low2down)

인쇄("하향 순서 시퀀스에서 TrendDown 플래그가 설정됨");

if (추세)

SL_Trailing_Down = 높음[1];

if (추세)

인쇄("다운 주문 순서에서 stop_loss를 설정했습니다");

if (추세)

TakeProfitDown = 입찰가 - (.005);

if (추세)

인쇄("다운 주문 순서에 따라 이익을 얻었습니다", TakeProfitDown);

if (TrendDown && BigDown)

DownAndBig = 사실;

if (DownAndBig && OrdTot_OK)

ticketdown= OrderSend(Symbol(),OP_SELL,lot, Bid,slip,SL_Trailing_Down,TakeProfitDown,Blue);

if (DownAndBig && OrdTot_OK)

인쇄("다운 주문 순서에 따라 티켓 입력을 시도했습니다", ticketdown);

if (티켓다운 < 0)

Print("OrderSend_Down이 #오류로 실패했습니다.",GetLastError());

리턴(0);

//---------------------------------------------다운 순서 완료

//------------------------------------------------ ---업 주문 시작

만약 (ABC == 0)

OrdTot_OK = 참;

만약 (ABC == 0)

인쇄("가는 순서에서 주문이 나오지 않았습니다");

((A - B) > 크기1)인 경우

빅업 = 사실;

((A - B) > 크기1)인 경우

인쇄("가는 순서에서 두 막대에 대한 크기 테스트는 정상이었습니다");

경우 (높음[1] > 높음[2])

High2Up = true;//44

경우 (높음[1] > 높음[2])

인쇄("가는 순서에서 최고점 증가에 대한 테스트는 정상이었습니다");

if(낮음[1] > 낮음[2])

Low2Up=참;

if(낮음[1] > 낮음[2])

인쇄("가는 순서에서 최저점 증가에 대한 테스트는 양호했습니다");

if (High2Up && Low2Up)

TrendUp1=참;

if (High2Up && Low2Up)

Print("위로 올라가는 순서에서 위로 가기 위한 플래그를 설정했습니다");

if (TrendUp1)

SL_Trailing_Up = 낮음[1] ;

if (TrendUp1)

인쇄("가는 순서에서 손절매를 설정했습니다");

if (TrendUp1)

TakeProfitUp = 묻기 + (.005);

if (TrendUp1)

인쇄("가는 순서로 수익 창출 설정", TakeProfitUp);

if (TrendUp1 && BigUp)

UpAndBig = 사실;

if ( UpAndBig && OrdTot_OK)

ticketup = OrderSend(Symbol(), OP_BUY, lot, Ask,slip, SL_Trailing_Up,TakeProfitUp,Red);

if (UpAndBig && OrdTot_OK)

Print("올라가는 순서대로, 주문을 보내려고 시도했습니다", ticketup);

if (티켓업 < 0)

Print("OrderSend_Up이 오류 #로 실패했습니다.",GetLastError());

리턴(0);

//------------------------------------------------ -업 주문 완료

//----

return(0);// 이 행에 대해 확실하지 않음

//+----------------------------------------------- -------------------+

//----

리턴(0);

}

//+------------

 

거래 전후 최소 바

안녕,

안녕하세요, 저는 MT4를 처음 사용합니다.. 누군가가 새 포지션을 열거나 이전 포지션을 닫기 위해 최소 "x" 막대가 필요한 EA에 제한을 두는 방법을 알려주시겠습니까?

(sleep 명령을 사용하지 않고)

문안 인사.

 

mql 코딩 도움말

if (iMA(NULL, 0, 24, 0, MODE_LWMA, PRICE_WEIGHTED, 1) > iMA(NULL, 0, 120, 1, MODE_LWMA, PRICE_WEIGHTED, 1)) gi_268 = 2;

-------------------------------------------------- --------------

무슨 뜻인가요 ??

2 LWMA 사용 ?

LWMA 기간 = 24 시프트 = 0 가격 가중(hcll4) 교차 LWMA 기간 120 시프트 = 1 가격 가중(hcll4) 다음 매수 또는 매도 ??

 

클로징 포지션 문제

안녕,

저는 새로운 EA로 시작했고 포지션을 여는 것은 괜찮습니다. tp와 sl을 설정했습니다. EA는 1 by 1 포지션으로 오픈 및 클로즈하며 1개 이상의 주문은 절대 없습니다. 그러나 일부 지표가 sl 또는 tp 한도 전에 경고하면 포지션을 청산하고 싶습니다.

내가 다음과 같이 시도하면 :

for (int i=1; i<=OrdersTotal(); i++) {

if (OrderSelect(i, SELECT_BY_POS, 2)) {

if (OrderSymbol()==Symbol()) {

Ans=OrderClose(OrderTicket(),alLots,Bid,2);// Order closing

}

}

}[/CODE]

Nothing happened. Doesn't find any opened positions and I know there is 1.

If I try something like this:

for (int i=1; i<=OrdersTotal(); i++) {

CloseOrder(OrderValue(i,VAL_TICKET),OrderValue(i,VAL_LOTS),Bid,3);

}

Compiler report error message that VAL_TICKER and VAL_LOTS are not defined and in examples I found they are nowhere declared.

If I try direcly by number to close:

[CODE]

Ans=OrderClose(0,alLots,Bid,2);// Order closing

시세 표시기가 유효하지 않다는 오류 메시지 4107 또는 4105가 나타납니다.

누군가가 첨부 파일에서 이것을 확인 하고 도움을 주실 수 있습니까?

정말 감사합니다

파일:
rsiproba.mq4  6 kb
 

iHighest iLowest 설명

막대 [2], 막대 [1] 및 막대 [0](현재)의 3개 막대를 가정합니다.

다음 "stop_low()" 함수가 [2] 및 [3] 막대의 가장 낮은 값을 찾는 것이 맞습니까?

이중 stop_low = iLowest(Symbol(),0,1,2,1);

-------------------------------------------------- ----------

참조:

int iLowest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

유형에 따라 특정 기간 동안 가장 작은 값의 이동을 반환합니다.

매개변수:

기호 - 지표를 계산하는 데 사용해야 하는 데이터의 기호입니다. NULL은 현재 기호를 의미합니다.

기간 - 기간. Timeframe 열거형 값 중 하나일 수 있습니다. 0은 현재 차트 기간 을 의미합니다.

유형 - 시리즈 배열 식별자입니다. Series 배열 식별자 열거형 값 중 하나일 수 있습니다.

count - 계산이 수행되는 기간의 수(시작 막대에서 뒤쪽 방향으로).

start - 데이터를 가져와야 하는 현재 막대를 기준으로 막대를 표시하는 Shift 키입니다.

견본:

// 범위에 있는 10개의 연속 막대에서 가장 낮은 값을 계산합니다.

// 현재 차트에 포함된 10번째부터 19번째 인덱스까지

이중 값 = 낮음;