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

 

예, 3단계를 만들고 싶습니다.

예:

15에 도달하고 10으로 돌아오세요

30에 도달하고 15로 돌아오십시오

45에 도달하고 15로 돌아오세요

또는 손절매 에서 닫습니다.

사진을 찍어서 더 잘 설명드리도록 하겠습니다.

 
fosgate_r:
이것은 나에게 새로운 것입니다.

따라서 손실을 입은 거래 마감은 항상 다시 반등할 때까지 기다려야 합니까?

반송이 되지 않는다면?

초기 SL에서 마감할까요?

지금까지 덕분에 이미 성공했고 이제 이 손실 방지 기능으로 좋은 결과를 얻기 위해 최적화하려고 합니다.

 

예를 들어 RSI 표시기처럼 선 그리기에 대한 정보를 찾으려고 합니다. 동일한 표시기에서 선으로 표시하려는 두 개의 숫자가 있습니다.

나는 그것이 일종의 배열을 포함할 것이라는 것을 알고 있지만 어떤 그룹의 코드가 이것을 발생시킬지 알아내지 못하고 있습니다.

 

표시기 버퍼

SPACECHIMP:
예를 들어 RSI 표시기처럼 선을 그리는 방법에 대한 정보를 찾으려고 합니다. 동일한 표시기에 선으로 표시하려는 두 개의 숫자가 있습니다. 어떤 코드 그룹이 이런 일이 발생하는지 알아내는 행운을 빕니다.

이 글을 읽어주세요

초보자를 위한 MQL4 언어. 사용자 지정 지표(1부) - MQL4 기사

 
smb1970:
안녕 여러분,

George Smith의 Forex Made-EZ에 대해 잘 아는 사람이 있는지 모르겠습니다.

나는 현재 그의 작업을 검토하고 있으며 그가 사용하는 오스카 오실레이터에 대한 지표를 코딩한 사람이 있는지 궁금합니다.

공식은

A = 마지막 8개 막대 중 가장 높은 값(이 막대 포함)

let B = 지난 8개 막대 중 가장 낮은 최저점(이 막대 포함)

let C = 현재 막대 종가

let X = 이전 오실레이터 수치(Oscar)

오늘날의 "거친" 오실레이터는 (CB)를 (AB)로 나눈 값에 100을 곱한 것과 같습니다.

다음으로 우리는 다음과 같이 대략적인 숫자를 "평활화"합니다(Y라고 부르자).

최종 오실레이터 수 = ((X 나누기 3) 곱하기 2), 더하기 (Y 나누기 3).

누구든지 이것을 코딩했거나 코딩할 수 있다면 매우 감사할 것입니다.

스티브 안부

직접 코딩을 해보았습니다. 아무도 이것이 내가 생각하는 일을 하는지 여부에 대해 논평할 수 있습니까? 값은 내가 수동으로 수치를 계산할 때 수행하는 작업에 합산되지 않는 것 같습니다. 또한 표시기가 배치된 시간부터 시작됩니다. 역사적 가치도 보여주고 싶다.

#속성 표시기_분리_창

#속성 표시기_버퍼 1

#property indicator_color1 빨간색

//---- 버퍼

이중 ExtMapBuffer1[];

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

//| 커스텀 인디케이터 초기화 기능 |

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

정수 초기화()

{

//---- 표시기

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ExtMapBuffer1);

string short_name = "오스카 지표";

IndicatorShortName(short_name);

//----

반환(1);

}

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

//| 고객 표시기 초기화 해제 기능 |

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

정수 초기화()

{

리턴(0);

}

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

//| 사용자 지정 표시기 반복 기능 |

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

정수 시작()

{

int counted_bars=IndicatorCounted();

//---- 가능한 오류 확인

if (counted_bars<0) return(-1);

//---- 마지막으로 계산된 막대가 다시 계산됩니다.

if (counted_bars>0) counted_bars--;

int pos=바 개수 계산된 바;

//---- 메인 계산 루프

이중 x;

x=50;

동안(위치>=0)

{

이중 a, b, c, y, osc;

// let A = 마지막 8개 막대 중 가장 높은 값(이 막대 포함)

a=높음;

//let B = 지난 8개 막대 중 가장 낮은 최저점(이 막대 포함)

b=낮음;

//let C = 현재 막대 종가

c = 닫기[pos];

//let X = 이전 오실레이터 수치(Oscar)

//오늘의 "거친" 오실레이터는 (CB)를 (AB)로 나눈 값에 100을 곱한 것과 같습니다.

y=((cb)/(ab))*100;

//다음으로 대략적인 숫자를 "매끄럽게"(Y라고 부르자) 다음과 같이 합니다.

//최종 오실레이터 수 = ((X 나누기 3) 곱하기 2), 더하기 (Y 나누기 3).

osc=((x/3)*2)+(y/3);

ExtMapBuffer1[pos]= osc ;

포스--;

}

반환(0);

}

어떤 도움도 감사히 받았습니다.

고마워 스티브

 

물어보세요... Mode_trades

안녕하세요, 누구든지 MODE_TRADES 사용에 대한 예를 줄 수 있습니까?

감사해요.

 

smb1970으로 - 이것은 다음과 같습니다.

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

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

#property indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 Red

#property indicator_maximum 100

#property indicator_minimum 0

//

//

//

//

//

extern int OscPeriod = 8;

extern int OscPrice = PRICE_CLOSE;

double oscBuffer[];

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

//| |

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

//

//

//

//

//

int init()

{

SetIndexBuffer(0,oscBuffer);

IndicatorShortName("Osc ("+OscPeriod+")");

return(0);

}

int deinit() { return(0); }

int start()

{

int counted_bars=IndicatorCounted();

int i,limit;

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//

//

//

//

//

for(i=limit; i>=0; i--)

{

double price = iMA(NULL,0,1,0,MODE_SMA,OscPrice,i);

double high = High[ArrayMaximum(High,OscPeriod,i)];

double low = Low[ArrayMinimum(Low,OscPeriod,i)];

//

//

//

//

//

if (high!=low)

double raw = 100.00*(price-low)/(high-low);

else raw = 0.00;

oscBuffer= oscBuffer*2.0/3.0 + raw/3.0;

}

return(0);

}

그러나 그림을 보세요. 위쪽은 "Oscar" 아래쪽은 stochastic(8)의 Ema(5)입니다. 더 간단하게 하자면 아래쪽은 신호선이 설정된 Stochastic(8,5,1)입니다. 지수로. 따라서 "Oscar"는 단순히 확률론적 신호선입니다.

파일:
oscar.gif  21 kb
 

감사해요!

mladen에게 감사합니다. 매우 유용할 뿐만 아니라 매우 유용합니다!

 

코딩에 도움이 필요한 NewB :-(

안녕 모두,

여기에서 다양한 도움이 필요합니다. . 다른 지표 간의 일치를 찾는 코드가 있습니다. 일단 그들이 모두 동의하면 나는 차트 이미지에서 설명한 방식으로 거래가 들어갈 수 있는 방법을 원합니다. 지금까지는 1차 "매수" 거래를 입력할 수 있지만 1거래만 입력하지 않습니다.... 최대 8거래를 입력하고 있습니다. 그런 다음 시장이 나에게 불리한 상황이 닥치더라도 다시 매수/매도하는 "비상 거래"에 들어갑니다. 누군가 올바른 코드가 어떻게 생겼는지 보여줄 수 있다면 대단히 감사하겠습니다.

이 이미지가 표시되는지 확실하지 않지만 첨부 파일로도 가지고 있는 경우를 대비하여.

다음은 거래를 실행해야 하는 결함이 있는 코드입니다...

동안 (execute_trade ==5)

{if ( OrdersTotal() == buy_trade1 ) //buy_trade1 = 1...주문이 1개 이루어진 후 중지되지만 아직 작동하지 않습니다.

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

실행_무역=0;

if(주문선택(티켓, SELECT_BY_TICKET, MODE_TRADES))

Print("내 티켓은: " , 티켓);

{

구매1 = OrderOpenPrice(); //첫 번째 주문의 가격을 가져와서 이 변수에 넣습니다.

// Comment("주문 번호 1 시가는 ", OrderOpenPrice () + " " + buy1 + " 보다 작음 " + (buy1-0.0030));

if (구매1 >= (구매1-0.0030))

{

//if ( OrdersTotal() <= buy_trade1 ) // 1개의 주문이 이루어진 후 중지합니다.

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

//execute_trade=0;

}

} 또 다른

Print("OrderSelect는 ", GetLastError() 오류를 반환했습니다.);

}

 

코딩에 도움이 필요한 NewB

안녕 모두,

여기에서 다양한 도움이 필요합니다. 다른 지표 간의 일치를 찾는 코드가 있습니다. 일단 그들이 모두 동의하면 나는 차트 이미지에서 설명한 방식으로 거래가 들어갈 수 있는 방법을 원합니다. 지금까지는 1차 "매수" 거래를 입력할 수 있지만 1거래만 입력하지 않습니다.... 최대 8거래를 입력하고 있습니다. 그런 다음 시장이 나에게 불리한 상황이 닥치더라도 다시 매수/매도하는 "비상 거래"에 들어갑니다. 누군가 올바른 코드가 어떻게 생겼는지 보여줄 수 있다면 대단히 감사하겠습니다.

이 이미지가 표시되는지 확실하지 않지만 첨부 파일로도 가지고 있는 경우를 대비하여.

그림 1

그림 2

다음은 거래를 실행해야 하는 결함이 있는 코드입니다...

동안 (execute_trade ==5)

{if ( OrdersTotal() == buy_trade1 ) //buy_trade1 = 1...주문이 1개 이루어진 후 중지되지만 아직 작동하지 않습니다.

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

실행_무역=0;

if(주문 선택(티켓, SELECT_BY_TICKET, MODE_TRADES))

Print("내 티켓은: " , 티켓);

{

구매1 = OrderOpenPrice(); //첫 번째 주문의 가격을 가져와 이 변수에 넣습니다.

// Comment("주문 번호 1 시가는 ", OrderOpenPrice () + " " + buy1 + " 보다 작음 " + (buy1-0.0030));

if (구매1 >= (구매1-0.0030))

{

//if ( OrdersTotal() <= buy_trade1 ) // 1개의 주문이 이루어진 후 중지합니다.

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

//execute_trade=0;

}

}

또 다른

Print("OrderSelect는 ", GetLastError() 오류를 반환했습니다.);

}