코딩 도움말..경보 대신 필터링할 지표를 얻으려면 어떻게 해야 합니까? - 페이지 4

 
Aaragorn:
이것까지 끓였는데..기다려..

이것이 고점을 찾기 위해 3.5를 곱한 이 한 막대의 단순 이동 평균을 사용하는 경우입니다. 어떻게 그 지점이 여기까지 올 수 있단 말인가? 라인 값이 신호를 보내기 위해 터치해야 하는 동일한 막대에서 계산되고 있지 않습니까? 바가 올라갈수록 엣지 라인도 올라가나요???

1개 이상의 막대에서 계산된 경우 이동 평균 따라서 라인은 1 값이 될 수 있고 가격은 다른 값이 될 수 있습니다.

 
elihayun:
상단 라인이 가격에 가까운지 알고 싶은 경우 알아낼 수 있는 한 가지 방법은 둘 사이의 차이가 작은지(예: 2포인트)입니다.

나는 가격이 선 아래에 있든 선 위에 있든 상관하지 않습니다(좋은 생각은 아닙니다). 나를 위해 2 포인트 거리가 소요됩니다. 그래서 차이는

upper - High 는 diff를 제공하지만 포인트는 제공하지 않습니다(0.0004 또는 -0.0004와 같은 것). diff가 양수인지 확인하기 위해 절대(양수) 값을 반환하는 MathAbs finction을 사용하고 있습니다. 이제 2점 미만인지 확인해야 합니다. 예약어 Point 는 가격이 1핍으로 올라갈 때 값을 반환합니다. 짝마다 다릅니다.

모두 함께 넣어

if (MathAbs(upper - High) < 2*Point) 는 차이가 2핍보다 작고 우리에게 충분히 가까운 경우를 의미합니다.

실제로 High를 사용하는 것은 좋지 않습니다. High가 그 이상일 수도 있지만 현재 가격이 너무 멀기 때문입니다. High 대신 Ask 를 사용해야 합니다(표시기에서 Close[x] 를 사용해야 함).

가격이 선 위에 있는지 확인하기 위해 우리는 이것을 할 수 있습니다

if ((Ask > upper) && (Ask - upper < 2 * Point))

.....(alert or open a trade)

[/PHP]

당신은 내 질문에 대한 많은 답변을 매우 잘합니다. 나는 당신을 지치게하지 않기를 바랍니다. 나는 배우고 싶어합니다.

절대값을 이해합니다. 닫기 대신 질문을 사용하면 어떻게 변경될지 궁금합니다. 닫기를 사용하는 것이 좋지 않을까요? 아니면 큰 차이가 날까요? 여전히 나를 혼란스럽게 하는 유일한 것은 두 번째 조건의 2 * 포인트 측면입니다. 포인트가 2배가 되지 않습니까? '*' 기호를 잘못 해석하고 있습니까 아니면 곱셈 기호입니까?

나는 Ask-upper가 상위 라인과 현재 Ask 값의 차이를 제공한다는 것을 알았습니다. 하지만 포인트에 2를 곱하면? 비교를 위해 사용할 수 있는 결과가 무엇인지 잘 모르겠습니다.

필터링된 구매 허용 한도 아래로 신호가 발생할 때만 구매를 허용하도록 할 수 있습니까?

[php]

extern 이중 장거리 = 25; //--구매를 허용하지 않기 전에 상단 밴드 라인에 접근할 수 있는 근접성

외부 이중 근거리 = 20; //--판매를 허용하지 않기 전에 하단 밴드 라인에 접근할 수 있는 근접성

// 엔트리

if(total < 2 || isNewSumbol(Symbol())) //if 조건도 수정했습니다: total<1(또는 BanAway aka cucurucu)

{

이중 HedgeLots = (HedgePercent/100)*Lots; // 헤지 포지션에 대한 랏을 계산합니다.

if(isCrossed == 1 && Ask < 상위 장거리)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

또 다른

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(티켓>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("구매 주문이 열렸습니다: ",OrderOpenPrice());

}

else Print("구매 주문 열기 오류: ",GetLastError());
 

당신은 한 가지를 놓치고 있습니다. Point 물건을 이해하려면 이것을 상상해보십시오.

USDJPY로 가격은 114.95이고 EURUSD로 가격은 1.2773입니다.

따라서 USDJPY로 요청 - 상단은 다음과 같습니다. 114.95 - 114.93 = 0.02

EURUSD 가격은 1.2773 - 1.2771 = 0.0002입니다.

둘 다 2포인트이지만 정밀도가 다르기 때문에 USDJPY에서는 2에 0.01을 곱해야 하고 EURUSD에서는 0.0001을 곱해야 하며 모든 쌍에서 이것은 정확히 포인트 와 동일합니다.

 
elihayun:
1개 이상의 막대에서 계산된 경우 이동 평균 따라서 라인은 1 값이 될 수 있고 가격은 다른 값이 될 수 있습니다.

바로 그거죠! 어떻게 하나의 막대의 평균이 될 수 있습니까?

//----------channel filter

int x = 0;

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

double avg;

avg = findAvg(back, x);

double upper = middle2 + (3.5*avg);

double lower = middle2 - (3.5*avg); [/PHP]

I don't see how this works....also the compiler say, 'findAvg' - function is not defined

it's looking for the shift value x which is zero so that is only going to be the current bar right? So what is it averaging?

ok let me see what might be...if i'm telling it to go 'back' 300 periods that is what it's averaging is 300 periods. ok i get it now i think....

now about the undefined function error? what do I do about that? just get rid of it as unnecessary?

[PHP]//----------channel filter

int x = 0;

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

double avg;

avg = (back, x);

double upper = middle2 + (3.5*avg);

double lower = middle2 - (3.5*avg);
 
elihayun:
당신은 한 가지를 놓치고 있습니다. 포인트 물건을 이해하려면 이것을 상상해보십시오.

USDJPY로 가격은 114.95이고 EURUSD로 가격은 1.2773입니다.

따라서 USDJPY로 요청 - 상단은 다음과 같습니다. 114.95 - 114.93 = 0.02

EURUSD의 가격은 1.2773 - 1.2771 = 0.0002입니다.

둘 다 2포인트이지만 정밀도가 다르기 때문에 USDJPY에서는 2에 0.01을 곱해야 하고 EURUSD에서는 0.0001을 곱해야 하며 모든 쌍에서 이것은 정확히 포인트 와 동일합니다.

알겠습니다. 문제가 있습니다. 제가 하고 싶은 것은 거래가 허용되지 않는 상단 및 하단 라인에 대한 근접성을 기반으로 장벽을 만드는 것입니다.

-그래서 먼저 라인의 현재 값을 얻습니다.

- 그런 다음 1=1 핍 이동으로 간주되는 정수로 거래할 수 없는 것으로 정의하려는 거리를 더하거나 뺍니다.

- 그런 다음 비교 조건을 만들기 위해 각 틱에 대한 가격이 어디에 있는지 값을 가져와야 합니다.

따라서 이 행은 'price_Typical' 이외의 값이어야 합니다.

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

다른 정밀도가 문제를 일으키지 않도록 유지하는 방법을 잘 모르겠습니다. 내가 하고 싶은 것은 '이 수준 이상으로 길게 거래하지 마십시오' 또는 '이 수준 이하에서 공매도하지 마십시오'를 지정하는 라인의 움직임과 상대적인 가격 움직임을 비교하는 것입니다.

나는 휴식을 취할 준비가 되어 있습니다.

 

PRICE_TYPICAL은(는) 관련이 없습니다. MQL4 도움말에서 이에 대해 읽을 수 있습니다.

가격과 선 사이의 차이를 찾기 위해 해야 할 일은 다른 것에서 하나를 빼는 것뿐입니다. 내가 말했듯이 문제는 때로는 0.0006을 얻고 때로는 0.06을 얻는데 이것이 요점이 해결된다는 것입니다.

(지금 문을 닫아야 합니다. 내일 계속할 수 있습니다.)

 
elihayun:
당신은 한 가지를 놓치고 있습니다. Point 물건을 이해하려면 이것을 상상해보십시오.

USDJPY로 가격은 114.95이고 EURUSD로 가격은 1.2773입니다.

따라서 USDJPY로 요청 - 상단은 다음과 같습니다. 114.95 - 114.93 = 0.02

EURUSD 가격은 1.2773 - 1.2771 = 0.0002입니다.

둘 다 2포인트이지만 정밀도가 다르기 때문에 USDJPY에서는 2에 0.01을 곱해야 하고 EURUSD에서는 0.0001을 곱해야 하며 모든 쌍에서 이것은 정확히 포인트 와 동일합니다.

그래서 포인트는 필요한 다른 정밀도에 관계없이 각 쌍에서 핍 움직임을 추적하는 것과 같습니다.

 
elihayun:
PRICE_TYPICAL은(는) 관련이 없습니다. MQL4 도움말에서 이에 대해 읽을 수 있습니다.

가격과 선 사이의 차이를 찾기 위해 해야 할 일은 다른 것에서 하나를 빼는 것뿐입니다. 내가 말했듯이 문제는 때로는 0.0006을 얻고 때로는 0.06을 얻는데 이것이 요점이 해결된다는 것입니다.

(지금 문을 닫아야 합니다. 내일 계속할 수 있습니다.)

당신의 인내와 격려에 감사드립니다

 

이게 내가 한거야....

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v2", back, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v2", back, 2, 0);

// ENTRY

if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position

if(isCrossed == 1 && Ask < upLevel-longrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,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());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### ends here

return(0);

}

if(isCrossed == 2 && Ask > LowLevel + shortrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,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());

//###################################################################### ends here

return(0);

}

return(0);

}

return(0);

}

return(0);

}

}

//+------------------------------------------------------------------+[/PHP]

this is what I got from the tester....

[PHP]2006.06.30 11:18:09 2006.06.06 14:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.06 12:14 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.06 10:26 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.05 22:47 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.05 09:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 08:41 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 07:30 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 07:29 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:08 2006.06.02 19:55 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:08 2006.06.01 11:27 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 06:45 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 04:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 02:44 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 00:37 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:00 2006.05.31 04:00 Trend Bands v2 EURUSD,M30: loaded successfully

2006.06.30 11:18:00 EMA_CROSSv5 EURUSD,M5: Tester comment: ----------------------------------------

TakeProfit=10 | TrailingStop=20 | StopLoss=20 | UseStopLoss=False

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

immediate_trade=True | reversal=False

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

Lots=1 | MM=True | Risk=10%

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

2006.06.30 11:18:00 EMA_CROSSv5 inputs: TakeProfit=10; TrailingStop=20; StopLoss=20; ShortEma=1; LongEma=5; Lots=1; HedgePercent=1; StartHour=0; StopHour=23; Risk=10; MAGICMA=20060301; longrange=1; shortrange=1; back=30; TF=30;

2006.06.30 11:17:35 EMA_CROSSv5: loaded successfully

보고서에 설정이 있지만 비어 있음이 표시됩니다....

그것은 분명히 거래를 허용하지 않지만 그들 모두를 허용합니까? 장단거리만 1로 설정하면 믿기지 않습니다!! 확실히 그 범위 안에 약간의 무역 신호가 있었습니까? 이것이 내가 의도한 바가 아니라고 생각합니다.

파일:
mac5.htm  5 kb
 

추세 밴드 표시기를 변경하여 더 유연하게 만들었습니다.

extern int period = 34;

extern int factor = 8;

avg = findAvg(period, x);

upper[x] = middle2 + (factor*avg);

lower[x] = middle2 - (factor*avg);[/PHP]

then i did this to the EA

//---- Trend Bands v2 and Filter Parameters

extern double back = 300; //--how many periods back for the custom indicator to average

extern double bandwidth = 6; //--how wide the trend bands are

extern double TF = 30; //--which bar period for the custom indicator to use

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);

I got this from the tester...(slightly abbreviated report)..

[PHP]2006.06.30 12:10:38 2006.06.29 23:59 Trend Bands v3 EURUSD,M30: removed

2006.06.30 12:10:38 2006.06.29 20:21 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:21 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:20 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:20 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:16 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:16 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:15 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:15 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:12 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:12 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:04 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:04 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:03 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:03 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:00 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:00 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:00 Trend Bands v3 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 12:10:38 2006.06.29 19:59 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:59 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:32 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:32 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:25 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:25 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:21 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:21 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:20 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:20 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:09 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:09 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:08 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:08 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:06 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:06 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 18:35 Trend Bands v3 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 12:10:38 2006.06.29 18:16 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 18:16 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 18:15 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 18:15 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:37 2006.06.29 00:00 Trend Bands v3 EURUSD,M30: loaded successfully

2006.06.30 12:10:37 EMA_CROSSv5 EURUSD,M5: Tester comment: ----------------------------------------

TakeProfit=10 | TrailingStop=20 | StopLoss=20 | UseStopLoss=False

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

immediate_trade=True | reversal=False

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

Lots=1 | MM=True | Risk=10%

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

2006.06.30 12:10:37 EMA_CROSSv5 inputs: TakeProfit=10; TrailingStop=20; StopLoss=20; ShortEma=1; LongEma=5; Lots=1; HedgePercent=1; StartHour=0; StopHour=23; Risk=10; MAGICMA=20060301; back=300; bandwidth=6; TF=30;

이 후에 대역폭을 20으로 이동하여 대역에 닿지 않도록 했습니다... 여전히 '131을 여는 중 오류'가 발생합니다.

ERR_INVALID_TRADE_VOLUME 131 잘못된 거래량 .

무슨 일이야?