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

 

...

코드의 오류가 아닙니다

도구 -> 기록 센터로 이동하여 테스트하려는 기호에서 1분 데이터를 선택하여 다운로드합니다(90% 정확도에 필요한 모든 것은 1분 데이터이며 나머지는 다운로드할 필요 없음).

Badguy:
안녕하세요 코더

저는 여전히 MQL-Code의 첫 단계를 배우고 있습니다.

저널에 다음 메시지가 표시되는 이유는 무엇입니까?

테스트 생성기:

일치하지 않는 데이터 오류(2009.05.06에서 볼륨 제한 159 19 15 초과)

코드에서 어디를 봐야 합니까?

감사해요
 
abundance:
내 친구와 나는 EA에서 일하고 있습니다. 어떤 단계에서 EA는 특정 시간(예: 17:00 EST... 등)의 가격을 읽고 검색해야 합니다.

시니어가 가격 막대를 거꾸로 계산하는 대신 그렇게 하는 방법을 조언해 주시겠습니까? 아마도 이미 작성된 함수가 있을 것입니다. 친절하게 도와주세요. 모두 감사합니다 & 신의 축복!

B rgds/풍부한

iBarShift(..)는 차트 의 막대 수 를 찾은 다음 닫기 또는 열기를 사용하는 데 도움이 됩니다.

 
Roger09:
iBarShift(..)는 차트의 막대 수를 찾은 다음 닫기 또는 열기를 사용하는 데 도움이 됩니다.

감사합니다 로저. 도움이 되었습니다. 그리고 명확하게 하지 못해 죄송합니다. Bid & Ask 가격이 모두 필요합니다. 어떻게 얻나요? 어리석은 질문이라면 실례합니다.

B rgds/풍부한

 

데이터 오류

안녕 mladen

빠른 응답에 감사드립니다.

다른 EA로 테스트하면 잘 작동하기 때문에 tickdata의 문제가 아니라고 생각합니다.

Custom-Indicator에 문제가 있는 것 같습니다.

나는 다음 indi를 내장할 것이다: AllAverages_v2.3

더블 ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERAGE_TF,"AllAverages_v2.3",ALL_AVERAGE_PERIOD,ALL_AVERAGE_SHIFT,ALL_AVERAGES_METHOD,ALL_AVERAGE_PRICE,0);

이제 다음 메시지가 있습니다: iCustom 함수의 잘못된 인덱스 버퍼 번호

이 iCustom을 올바르게 정의하는 방법은 무엇입니까?

안녕하세요 mladen 문제를 찾았습니다

하나의 매개변수를 잊어버렸습니다: 색상

올바른 정의:

이중 ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERAGE_TF,"AllAverages_v2.3",ALL_AVERAGE_PERIOD,ALL_AVERAGE_SHIFT,ALL_AVERAGE_METHOD,ALL_AVERAGE_PRICE,ALL_AVERA_COLOR,0);

mladen:
코드의 오류가 아닙니다. 도구 -> 기록 센터로 이동하여 테스트하려는 기호에서 1분 데이터를 선택하여 다운로드합니다(90% 정확도에 필요한 것은 1분 데이터, 나머지는 다운로드할 필요 없음).
파일:
 
abundance:
감사합니다 로저. 도움이 되었습니다. 그리고 명확하게 하지 못해 죄송합니다. Bid & Ask 가격이 모두 필요합니다. 어떻게 얻나요? 어리석은 질문이라면 실례합니다. B rgds/풍부한

차트의 모든 가격은 입찰가입니다. Ask=입찰가+시장정보(Symbol(),MODE_SPREAD)*포인트;

 

거래 제한

그래서 EA 빌더를 생성하는 템플릿 중 하나로 기본 EA를 작성하기 시작했습니다. EA 템플릿의 전제를 내려놓은 것 같지만 EA가 최대 한 번의 거래만 입력하도록 하는 방법이 필요합니다. 바로 지금 그것은 거래를 계속 생성하고 무승부를 우스꽝스럽게 만듭니다. 다음은 거래 로트 코드입니다.

//위치 확인

bool IsTrade = 거짓;

for (int i = 0, i < 총계, i ++) {

주문 선택(i, SELECT_BY_POS, MODE_TRADES);

if(주문 유형() <= OP_SELL && 주문 기호() == 기호()) {

IsTrade = 사실;

if(주문 유형() == OP_BUY) {

//닫다

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

//| 시그널 비긴(Exit Buy) |

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

if (CloseBuy1_1 >= CloseBuy1_2) 주문 = SIGNAL_CLOSEBUY;

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

//| 시그널 종료(Exit Buy) |

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

if (주문 == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (막대 != BarCount))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = 막대;

IsTrade = 거짓;

계속하다;

}

//후행 정지

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > 포인트 * TrailingStop) {

if(OrderStopLoss() < 입찰 - 포인트 * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), 입찰 - 포인트 * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = 막대;

계속하다;

}

}

}

} 또 다른 {

//닫다

누구든지 도움을 주시면 대단히 감사하겠습니다.

 
Styex:
그래서 EA 빌더를 생성하는 템플릿 중 하나로 기본 EA를 작성하기 시작했습니다. EA 템플릿의 전제가 무너진 것 같지만 EA가 최대 한 번의 거래만 입력하도록 하는 방법이 필요합니다. 바로 지금 그것은 거래를 계속 생성하고 무승부를 우스꽝스럽게 만듭니다. 누구든지 도움을 주시면 대단히 감사하겠습니다.
if (OrdersTotal() == 0)

{

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy) |

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

if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

}
 

감사합니다

이 EA를 찾았지만 일부는 이해가 되지 않습니다.

부울 get_signal()

{

부울 enable_trade = 거짓;

int trend_up = 0;

int trend_down = 0;

정수 나;

ArrayInitialize( TradeSign, false );

if( 막대 >= 100 ){

for( i = 0 ; i < DEF_MA_NUM ; i++ ){

Buf_MA[0][ i ] = calc_SMA(PERIOD_M30, MA_prm_1, i );

Buf_MA[1][ i ] = calc_SMA(PERIOD_M30, MA_prm_2, i );

Buf_MA[2][ i ] = calc_SMA(PERIOD_M30, MA_prm_3, i );

Buf_MA[3][ i ] = calc_SMA(PERIOD_M30, MA_prm_4, i );

Buf_MA[4][ i ] = calc_SMA(PERIOD_M30, MA_prm_5, i );

}

이중 vRSI = iRSI( Symbol(), PERIOD_M5, RSI_period5, PRICE_CLOSE, 0 );

이중 vRSI2 = iRSI( Symbol(), PERIOD_M1, RSI_period1, PRICE_CLOSE, 0 );

for( 나는 = 0 ; 나는 < DEF_MA_TYP ; 나는 ++ ){

if((Buf_MA[2] < Buf_MA[1]) && (Buf_MA[1] < Buf_MA[0])){

Trend_up++;

}

}

if((trend_up > 3) && (vRSI <= RSI_lower) && (vRSI2 <= RSI_lower)){

TradeSign[SIG_Buy] = true;

enable_trade = 사실;

}

for( 나는 = 0 ; 나는 < DEF_MA_TYP ; 나는 ++ ){

if((Buf_MA[2] > Buf_MA[1]) && (Buf_MA[1] > Buf_MA[0])){

Trend_down++;

}

}

if((trend_down > 3) && (vRSI >= RSI_upper) && (vRSI2 >= RSI_upper)){

TradeSign[SIG_Sell] = true;

enable_trade = 사실;

}

}

반환(enable_trade);

}

이중 calc_SMA( int timeframe, int period, int offset )

{

이중 vMA = 0;

이중 합=0;

정수 나;

for( i = 0 ; i < 기간 ; i++ ){

합계 += iClose ( Symbol(), 시간 프레임, i + 오프셋 );

}

vMA = 합계 / 기간;

리턴(vMA);

}

"trendup>3"인 부분이 있습니다. 이것은 배열에서 계산됩니까? 배열은 어떻게 작동하므로 "trendup>3"을 줄 수 있습니까? 이것은 한 줄에서 평균을 알기 위한 것입니까? 나는 그것이 어떻게 작동하는지 이해하지 못합니다.
파일:
 

목표 이익에 도달했을 때 전문가를 재설정하는 방법은 무엇입니까? martingale 전략을 사용하고 있지만 순서대로 많이 열리지 않습니다 ...

예: 로트 0.1, 0.2, 0.4, 0.8, 1.6

오픈 로트: 0.1, 0.2, 0.4 -> 로트 0.4에서 이익을 취하지 만 다음 로트는 0.8 , 0.1, 0.2, 0.4...

누구든지 도울 수 있습니다 ...???

int T=0;

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

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderComment()==Name_ExpertS)

{ T++;

if(OrderType()==OP_BUY) s=1;

if(OrderType()==OP_SELL) s=2;

Last=OrderOpenPrice();

}}

if (Lots<0.1) Lots=0.1;

for (int j=0;j<T;j++)

{

Lots=LotsUP[j];

}
 

높음/낮음(기준 포함)

저는 양초가 진정한 고점 또는 저점이라고 말하기 전에 특정 항목을 찾는 지표를 코딩하려고 합니다. 이것은 기본적으로 기준입니다(설명을 돕기 위해 차트를 첨부했습니다).

1. 이전의 20개 종가보다 낮은 종가를 찾은 다음(두 번째 화살표가 이 지점) (2) 12바 후 종가가 이전의 12개 종가보다 높아야 합니다(세 번째 화살표). 이 상승 추세는 (3) 이전의 7 종가보다 낮은 종가가 있을 때까지 계속될 것입니다(네 번째 화살표).

나는 많은 성공 없이 iLowest 기능을 사용하려고 노력해 왔습니다. 최선의 방법은 배열을 사용하는 것이라고 생각하지만 배열에 대한 지식은 제한적입니다.

ArrayMinimum 및 ArrayMaximum을 사용 하는 방법에 대한 아이디어나 예가 있습니까? 또는 iLowest 및 iHighest가 작동하도록 하는 방법이 있다면?

파일: