연속 구매/판매 막대를 연속으로 계산하는 방법에 대한 코드가 있는 사람이 있습니까? 차트에 몇 번이나 셀 수 있는지 계산하고 싶습니다(확인할 막대 수 입력) 연속으로 1개의 판매 막대, 연속으로 32개의 판매 막대, 연속으로 3개의 판매 막대, 연속으로 4개의 판매 막대(동일 구매) 등
즉, prog의 sed 상수 중 일부는 "eyeball" 추정치에 의해 발견됩니다. 이것은 프로그램에 큰 영향을 미치지 않아야 합니다... 또한 다른 상수로 작동하지 않습니다. (적어도 Strategy Tester 로 테스트할 때 "tick by tick"이 아닌 fast 또는 medium으로 설정합니다. (너무 느림...)
어쨌든 prog는 테스트할 때 주문을 입력하지 않으며 절대 입력하지 않습니다! "위" 방향으로 확인하십시오. (이것은 "인쇄"/추적을 통해)
(확인해야 합니다: enter w/ buy or enter w/ Sell)
부수적 논리: 2개의 연속 막대를 확인합니다. 막대 1에 더 높은 고점과 더 높은 저점이 있으면 prog는 다음 막대가 올라갈 것이라고 생각합니다.
외부 *.set 파일 사용
나는 시도하고 시도했지만 이것을 알아낼 수 없으므로 누군가가 여기 숲을 통해 나무를 볼 수 있기를 바랍니다.
프로그래밍된 설정을 사용하거나 외부 *.set 파일을 사용하도록 EA를 프로그래밍하고 싶습니다.
그래서 만약:
extern 부울 UseExternSet = true;
프로그래밍된 설정이 아닌 외부 설정 파일의 설정을 사용합니다.
할 수 있지만 여기에서 간단하게 잃어버린 것을 알 수 있습니다.
모든 ea 예제가 할 것입니다
남자 이름
컴파일러 문제 또는 코드 문제?
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가 정의되지 않았습니다"라고 말합니다. 내가 무엇을 합니까? 내가 볼 수 있는 한 변수가 초기화되고 값이 지정되었습니다.
내 컴파일러 문제입니까 아니면 코드 문제입니까?
[암호]
이중 CMA(int tf,int period, int shift, int 메서드)
{
이중 MA=iMA(NULL,tf,기간,0,메서드,0,시프트) ;
반환(MA) ;
}
[암호]
이중 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가 나타납니다.
누군가가 첨부 파일에서 이것을 확인 하고 도움을 주실 수 있습니까?
정말 감사합니다
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번째 인덱스까지
이중 값 = 낮음;