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

 
Dan7974:
이것을 어떻게 코딩할 수 있습니까?

시장이 터치하면 (X.XX50 또는 X.XX00)

그런 다음 구매. 마지막 두 숫자를 식별하는 방법은 무엇입니까?

감사해요.

이렇게 해야 합니다.

if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,0.50) ; }

else { xPrice = Close - ( MathMod(100*Close,0.50)*0.01 ) ; }

P1Buffer = xPrice + Point*50;

P2Buffer = xPrice ;

P3Buffer = xPrice - Point*50;

[/CODE]

When MathMod(Close,0.50) = 0 then the price ends in 00 or 50.

Here's my indicator to identify 00 lines:

[CODE]

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

//| _TRO_00_Lines |

//| |

//| |

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

#property indicator_chart_window

#property indicator_buffers 3

#property indicator_color1 LightGray

#property indicator_color2 LightGray

#property indicator_color3 LightGray

// indicators parameters

//---- buffers

double P1Buffer[];

double P2Buffer[];

double P3Buffer[];

double xPrice ;

int myStyle = 2 ;

int myWingDing = 250 ;

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

//| Custom indicator initialization function |

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

int init()

{

SetIndexBuffer(0, P1Buffer);

SetIndexBuffer(1, P2Buffer);

SetIndexBuffer(2, P3Buffer);

SetIndexArrow(0, myWingDing);

SetIndexArrow(1, myWingDing);

SetIndexArrow(2, myWingDing);

SetIndexStyle(0, DRAW_ARROW, myStyle, 1);

SetIndexStyle(1, DRAW_ARROW, myStyle, 1);

SetIndexStyle(2, DRAW_ARROW, myStyle, 1);

SetIndexEmptyValue(0,0);

SetIndexEmptyValue(1,0);

SetIndexEmptyValue(2,0);

return(0);

}

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

//| Custom indicator deinitialization function |

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

int deinit()

{

return(0);

}

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

//| Custom indicator iteration function |

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

int start()

{

int i, dayi, counted_bars = IndicatorCounted();

//---- check for possible errors

if(counted_bars < 0)

return(-1);

//---- last counted bar will be recounted

if(counted_bars > 0)

counted_bars--;

int limit = Bars - counted_bars;

//----

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

{

if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,1.00) ; }

else { xPrice = Close - ( MathMod(100*Close,1.00)*0.01 ) ; }

P1Buffer = xPrice + Point*100;

P2Buffer = xPrice ;

P3Buffer = xPrice - Point*100;

} // for

return(0);

} // start
 

그래도 EA에는 필요합니다!

 

코더님들 도와주세요

촛대에서 더 많은 점을 위아래로 이동하려면 코드에서 무엇을 변경해야 합니까?

파일:
diagram.gif  18 kb
 

코드를 게시하면 누군가 실제로 도움이 될 수 있습니다.

럭스

 

다음은 지표입니다

표시기 당신은 위아래로 점을 이동하는 코드를 변경할 수 있습니다

파일:
 

시간[]의 적절한 사용

저는 공정한 프로그래머이지만 mql4를 처음 사용합니다. 저는 박스 트레이드(일명 브레이크아웃 트레이드) 전문가 고문으로 일하고 있습니다. 기본적으로 특정 기간 동안 가장 높은 값과 가장 낮은 값을 찾아야 하며 해당 상자 밖에서 양초가 닫힐 때 거래를 합니다.

기본적으로 세 가지 상태가 있습니다. 저는 EA를 다음에서 시작할 수 있습니다.

1) 전일 마감 후, 박스 시작 시간 전

2) 박스 시작 후 박스 종료 전.

3) 상자가 끝난 후.

인덱스가 계속 변경되기 때문에 내가 혼란스러워하는 것은 Time[] 배열입니다. 상태 2에서 입력한다고 가정합니다. 초기화 함수 에서 상자 시작 위치를 제공하는 전역 변수를 설정하려고 했습니다. 따옴표가 들어오면 시작 기능이 계속 호출되고 상자 시간이 끝나면 시작 위치와 끝 위치를 갖게 됩니다. 물론 Time 배열의 인덱스가 계속 롤포워드되기 때문에 그렇지 않습니다.

기껏해야 상자 시작 인덱스의 위치를 계속 증가시킬 수 있지만 그렇게 하는 것이 아주 깔끔한 방법은 아닌 것 같습니다.

기존 c/c++에서 mql4로 내 생각을 바꾸는 방법에 대한 제안이 있으면 듣고 싶습니다.

또한 작업을 마치면 더 선임 프로그래머가 코드를 검토하면 분명히 큰 도움이 될 것입니다. 이를 위해 자원봉사를 하고 싶은 사람이 있습니까?

시간 내 줘서 고마워,

마커스

 
mweltin:
저는 공정한 프로그래머이지만 mql4를 처음 사용합니다. 저는 박스 트레이드(일명 브레이크아웃 트레이드) 전문가 고문으로 일하고 있습니다. 기본적으로 특정 기간 동안 가장 높은 값과 가장 낮은 값을 찾아야 하며 해당 상자 밖에서 양초가 닫힐 때 거래를 합니다.

기본적으로 세 가지 상태가 있습니다. 저는 다음에서 EA를 시작할 수 있습니다.

1) 전일 마감 후, 박스 시작 시간 전

2) 박스 시작 후 박스 종료 전.

3) 상자가 끝난 후.

인덱스가 계속 변경되기 때문에 내가 혼란스러워하는 것은 Time[] 배열입니다. 상태 2에서 입력한다고 가정합니다. 초기화 함수에서 상자 시작 위치를 제공하는 전역 변수를 설정하려고 했습니다. 따옴표가 들어오면 시작 기능이 계속 호출되고 상자 시간이 끝나면 시작 위치와 끝 위치를 갖게 됩니다. 물론 Time 배열의 인덱스가 계속 롤포워드되기 때문에 그렇지 않습니다.

기껏해야 상자 시작 인덱스의 위치를 계속 증가시킬 수 있지만 그렇게 하는 것이 아주 깔끔한 방법은 아닌 것 같습니다.

기존 c/c++에서 mql4로 내 생각을 바꾸는 방법에 대한 제안이 있으면 듣고 싶습니다.

또한 작업을 마치면 더 선임 프로그래머가 코드를 검토하면 분명히 큰 도움이 될 것입니다. 이를 위해 자원봉사를 하고 싶은 사람이 있습니까?

시간 내 줘서 고마워,

마커스

안녕. Time[] 함수 는 계속 변경되지 않고 현재 차트 막대의 끝에서만 변경됩니다. 반면에 TimeCurrent()는 지속적으로 변화하는 값을 반환합니다(1초 분해능이기는 하지만).

iTime()을 사용하여 모든 막대 및 시간대의 정확한 시간을 얻을 수도 있습니다. 그것에 대해 갈 수있는 몇 가지 방법이 있습니다 ...

 

동시에 두 개의 주문을 열다(문제...)

안녕하세요, 일부 기회에서 스크립트가 동시에 두 개의 주문을 여는 이유를 모르겠습니다.

누군가 이 일을 도와주세요.

if(UseStopLoss)

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

또 다른

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

if(티켓>0)

{

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

}

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

감사해요

 

코드 도움말

안녕하세요 여러분,

HMA와 같은 지표의 반전을 생성하는 종가를 계산하기 위한 지표를 코딩하고 싶습니다. 이를 위해 나는 반전을 생성하는 값을 찾기 위해 이분법 루프에서 현재 값을 수정하는 닫기 값 탭으로 HMA의 하나의 값을 계산하기 위한 함수를 생성해야 합니다.

누군가 내 ComputeHull 기능을 도와줄 수 있습니까?

여기 내 코드는 이분법 연구 없이 computeHull 기능이 있는 단순한 HMA 표시기이며 표시기는 표시되지만 아래로 이동됩니다.

문안 인사

//#속성 표시기_separate_window

#속성 표시기_차트_창

#속성 표시기_버퍼 3

#property indicator_color1 파란색

//---- 입력 매개변수

extern int HullAntPeriod=12;

//---- 버퍼

이중 TempBuf1[];

이중 TempBuf2[];

이중 HullAntBuf[];

//변하기 쉬운

int HalfHullAntPeriod;

int SqrtHullAntPeriod;

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

//| 특정 기능 |

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

이중 ComputeHull(int ActualBar)

{

이중 CloseTemp[];

이중 온도[];

이중 Temp1, Temp2;

이중 결과 = -1;

정수 나;

// 닫기 값을 CloseTemp에 복사

ArrayResize(CloseTemp, HullAntPeriod+SqrtHullAntPeriod);

ArrayCopy(CloseTemp, 닫기, 0, ActualBar, HullAntPeriod+SqrtHullAntPeriod);

ArraySetAsSeries(CloseTemp, true);

ArrayResize(온도, SqrtHullAntPeriod);

//HMA 값 계산

for(i=0; i<SqrtHullAntPeriod; i++)

{

Temp1 = iMAOnArray(CloseTemp, 0, HalfHullAntPeriod, 0, MODE_LWMA, i);

Temp2 = iMAOnArray(CloseTemp, 0, HullAntPeriod, 0, MODE_LWMA, i);

온도 = 2*Temp1-Temp2;

}

ArraySetAsSeries(온도, 참);

결과 = iMAOnArray(온도, 0, SqrtHullAntPeriod, 0, MODE_LWMA, 0);

//---- 완료

반환(결과);

}

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

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

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

정수 초기화()

{

//---- 임시 데이터에 1개의 추가 버퍼가 사용됩니다.

표시 버퍼(3);

//---- 그리기 설정

SetIndexStyle(0,DRAW_LINE);

SetIndexStyle(1,DRAW_NONE);

//---- 2개의 인디케이터 버퍼 매핑

SetIndexBuffer(0,HullAntBuf);

SetIndexBuffer(1, TempBuf1);

SetIndexBuffer(2,TempBuf2);

//---- DataWindow의 이름 및 표시기 하위 창 레이블

IndicatorShortName("HULL ANTICIP("+HullAntPeriod+")");

SetIndexLabel(0,"선체 예상");

SetIndexLabel(1,NULL);

SetIndexLabel(2,NULL);

//---- 특정 인디케이터 초기화

HalfHullAntPeriod = MathFloor(HullAntPeriod/2);

SqrtHullAntPeriod = MathFloor(MathSqrt(HullAntPeriod));

//---- 초기화 완료

리턴(0);

}

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

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

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

정수 초기화()

{

//----

//----

리턴(0);

}

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

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

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

정수 시작()

{

int 막대, 한계, i;

int counted_bars=IndicatorCounted();

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

if(counted_bars>0) counted_bars--;

limit=막대-counted_bars;

for(i=0; i<한계; i++)

HullAntBuf=ComputeHull(i);

//----

반환(0);

}

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

 

왜 이것이 작동하지 않습니까?

int Highest;

double Place;

int Start()

{

Highest=iHighest(Symbol(),0,MODE_HIGH,1,0);Place=iHigh(Symbol(),0,Highest);

if(Gate==0){

if(iClose(Symbol(),0,0)>=Place){

OrderModify(ticket3,Ask,Ask-TrailingStop*Point-Spread,0,0,Green);

Gate=1;}

return(0);

}

오류가 발생합니다. 나는 간단한 후행 정지를 할 수 없습니다!!!!!!!