묻다! - 페이지 88

 
 

Ralph에게 감사합니다. 시도했지만 다른 오류 목록이 표시되었습니다. 포함 파일의 모든 변수가 정의되지 않았다고 합니다.

주말에 한번 더 가봐야겠습니다. 지금은 조금 답답합니다.

@faqcya - 스크립트에 넣는 것이 옳다고 생각하지만 스크립트에 넣을 쉘 EA가 없으면 호출을 처리하는 다른 방법을 모르겠습니다.

아마도 템플릿을 살펴보고 거기에서 호출할 수 있는지 또는 EA로 변환하는 것이 더 좋은지 알 수 있습니다. 다른 작업은 하지 않고 있는 그대로만 원합니다.

당신의 도움을 주셔서 감사합니다,

케빈

ralph.ronnquist:
@pgtips: 두 번째 줄을 전용으로 변경
#define MAGIC 20051120
즉, 등호와 쉼표가 없습니다.
 

프로그래밍을 배우려고 합니다

우선, 나는 코더의 구루의 전체 과정을 읽었고 매우 흥미로웠다. 나는 전략을 시도하는 유일한 합리적인 방법은 그것이 완전히 정확한지 확인하는 프로그램을 작성하는 것이라는 결론에 도달했습니다. 불행히도, 나는 이것에 관해서 완전히 초보자입니다.

나는 기본 프로그램을 작성하려고 노력했지만 작동하지 않습니다. 적어도 더 이상 오류가 발생하지 않지만 주문은 받지 않습니다. 나는 끈기 있고 계속 노력할 것이지만 내 실수를 보는 사람에게 도움을 주시면 감사하겠습니다.

이 시점에서 내가 하려는 것은 최저가(CurrentLow)를 추적한 다음 일정 금액만큼 되돌릴 때(Ret1), 저점의 TP로 매도 주문 을 하는 것입니다.

웃지 마세요. 하지만 다음은 제가 지금까지 쓴 것입니다.

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

외부 이중 TP1=75.0;

외부 이중 Ret1=75.0;

외부 이중 SL1=150.0;

외부 이중 로트=0.1;

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

//| 전문가 초기화 기능 |

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

정수 초기화()

{

//----

//----

리턴(0);

}

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

//| 전문가 초기화 해제 기능 |

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

정수 초기화()

{

//----

//----

리턴(0);

}

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

//| 전문가 시작 기능 |

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

정수 시작()

{

정수 티켓 = 0;

if(막대<100)

{

Print("100개 미만의 막대");

리턴(0);

}

이중 CurrentLow, CurrentHigh;

if(입찰가 < 현재 최저가)

{

CurrentLow = 입찰가;

if(입찰가 > CurrentHigh)

{

CurrentHigh = 입찰가;

if(CurrentHigh >= CurrentLow+(포인트*Ret1))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point),"Albatross_v1",757575,0,Green);

리턴(0);

}

리턴(0);

}

리턴(0);

}

}

 
Putz:
우선, 나는 코더의 구루의 전체 과정을 읽었고 매우 흥미로웠다. 나는 전략을 시도하는 유일한 합리적인 방법은 그것이 완전히 정확한지 확인하는 프로그램을 작성하는 것이라는 결론에 도달했습니다. 불행히도, 나는 이것에 관해서 완전히 초보자입니다.

나는 기본 프로그램을 작성하려고 노력했지만 작동하지 않습니다. 적어도 더 이상 오류가 발생하지 않지만 주문은 받지 않습니다. 나는 끈기 있고 계속 노력할 것이지만 내 실수를 보는 사람에게 도움을 주시면 감사하겠습니다.

이 시점에서 제가 하려고 하는 것은 최저가(CurrentLow)를 추적한 다음 일정 금액만큼 되돌릴 때(Ret1), 저점의 TP로 매도 주문을 하는 것입니다.

웃지 마세요. 하지만 다음은 제가 지금까지 쓴 것입니다.

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

외부 이중 TP1=75.0;

외부 이중 Ret1=75.0;

외부 이중 SL1=150.0;

외부 이중 로트=0.1;

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

//| 전문가 초기화 기능 |

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

정수 초기화()

{

//----

//----

리턴(0);

}

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

//| 전문가 초기화 해제 기능 |

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

정수 초기화()

{

//----

//----

리턴(0);

}

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

//| 전문가 시작 기능 |

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

정수 시작()

{

정수 티켓 = 0;

if(막대<100)

{

Print("100개 미만의 막대");

리턴(0);

}

이중 CurrentLow, CurrentHigh;

if(입찰가 < 현재 최저가)

{

CurrentLow = 입찰가;

if(입찰가 > CurrentHigh)

{

CurrentHigh = 입찰가;

if(CurrentHigh >= CurrentLow+(포인트*Ret1))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point),"Albatross_v1",757575,0,Green);

리턴(0);

}

리턴(0);

}

리턴(0);

}

}

Bid < CurrentLow 인 true 조건 내에서 Bid > CurrentHigh 를 확인하는 것은 잘못된 것 같습니다. 나는 당신이 다음과 같은 독립적 인 테스트를해야한다고 생각합니다.

double CurrentLow,CurrentHigh;

int start()

{

if(Bid < CurrentLow) CurrentLow = Bid;

if(Bid > CurrentHigh) CurrentHigh = Bid;

if(Bid >= CurrentLow+(Point*Ret1))

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point),"Albatross_v1",757575,0,Green);

return(0);

}

이제 세 가지 의견이 있습니다.

- 전역 특종에 대해 CurrentHigh 및 CurrentLow를 선언해야 합니다. 즉, 모든 함수 에서(그리고 start()는 함수임) 그렇지 않으면 해당 변수가 함수를 호출할 때마다 0으로 초기화됩니다.

- CurrentHigh는 사용하지 않으므로 필요하지 않습니다.

- CurrentLow 값을 재설정/업데이트하고 CurrentLow+(Point*Ret1)) 위의 각 틱에서 주문 열기를 제한하는 일부 논리를 구현해야 합니다.

 

안녕 미셸,

귀하의 신속한 응답과 도움에 진심으로 감사드립니다.

나는 CurrentHigh를 삭제했고 지금은 훨씬 더 잘 이해합니다. 또한 프로그램 상단에 CurrentLow를 정의했고 이제 실제로 주문을 합니다.

나는 또한 더 큰 되돌림을 기반으로 한 두 번째 주문을 추가했는데 효과가 있는 것 같습니다. 이제 매 틱마다 새로운 주문을 생성하지 않도록 하는 방법을 알아내야 하지만 그렇게 하면 더 잘 배울 것이기 때문에 당분간은 스스로 작업할 것입니다.

나는 더 많은 질문을 가지고 여기로 돌아올 것이라고 확신합니다.

다시 한번 감사합니다.

푸츠

 
Putz:
안녕 미셸,

귀하의 신속한 응답과 도움에 진심으로 감사드립니다.

나는 CurrentHigh를 삭제했고 지금은 훨씬 더 잘 이해합니다. 또한 프로그램 상단에 CurrentLow를 정의했고 이제 실제로 주문을 합니다.

나는 또한 더 큰 되돌림을 기반으로 한 두 번째 주문을 추가했는데 효과가 있는 것 같습니다. 이제 매 틱마다 새로운 주문을 생성하지 않도록 하는 방법을 알아내야 하지만 그렇게 하면 더 잘 배울 것이기 때문에 당분간은 스스로 작업할 것입니다.

나는 더 많은 질문을 가지고 여기로 돌아올 것이라고 확신합니다.

다시 한번 감사합니다.

푸츠

큰 값(예: 1000)으로 CurrentLow를 초기화하는 것을 잊지 마십시오. 0으로 초기화되면 입찰가 < 0을 가질 수 없습니다.

 

어떤 프로그래밍 언어를 배울까요?

codersguru:
안녕 여러분,

코드의 일부를 도와달라는 개인적인 메시지를 많이 받았습니다.

여기에 MQL4와 관련된 질문을 게시할 수 있습니다. 최선을 다해 답변해 드리겠습니다.

친애하는 코더 구루,

MQL4 코드 작성을 배우고 싶다면 어떤 프로그래밍 언어를 배워야 합니까? 비주얼 베이직인가 C++인가? 답변해주셔서 감사합니다.

 

더 많은 도움을 주세요

여보세요,

더 많은 도움을 받으러 돌아왔습니다. 나는 그것을 알아내기 위해 다른 많은 EA를 읽고 살펴보았지만 여전히 제대로 작동하지 않습니다.

내가 하려고 하는 것은 두 가지 주문을 하는 것입니다.

1) TP1(75) 및 SL1(150)이 있는 Ret1(75핍)의 가격 되돌림 후 0.1랏 매도

2) TP1(75) 및 SL1(75)을 사용하여 Ret2(150핍)의 가격 되돌림 후 0.2랏 매도

장기적으로 추세의 방향에 따라 위와 같은 매수 주문을 받고 싶습니다. 아직 추세를 결정하는 데 사용할 지표를 결정하지 않았지만 언젠가는 도달할 것입니다.

다음은 현재 가지고 있는 것입니다. 첫 번째 주문은 제대로 한 것 같지만 두 번째 주문은 실행되지 않습니다. 도움을 주시면 감사하겠습니다.

extern string Expert_Name = "알바트로스 v1";

외부 정수 MagicNumber = 757575;

extern int 미끄러짐 = 3.0;

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

외부 이중 TP1=75.0;

외부 이중 TP2=75.0;

외부 이중 Ret1=75.0;

외부 이중 Ret2=150.0;

외부 이중 SL1=150.0;

외부 이중 SL2=75.0;

외부 이중 로트=0.1;

이중 CurrentLow=1000;

//이중 CurrentHigh=0;

정수 OpenOrders=0,cnt=0;

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

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

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

//int 초기화()

// {

//---- 표시기

//----

// 반환(0);

// }

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

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

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

// 정수 초기화()

// {

//---- TODO: 여기에 코드 추가

//----

// 반환(0);

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

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

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

// 정수 시작()

// {

//---- TODO: 여기에 코드 추가

//----

// 반환(0);

// }

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

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

//| 전문가 초기화 기능 |

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

정수 초기화()

{

//----

//----

리턴(0);

}

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

//| 전문가 초기화 해제 기능 |

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

정수 초기화()

{

//----

//----

리턴(0);

}

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

//| 오픈 포지션 컨트롤 확인 |

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

int CheckOpenTrades()

{

정수 cnt;

정수 NumTrades; // 이 기호의 매수 및 매도 거래 수

NumTrades = 0;

for(cnt=OrdersTotal()-1;cnt>=0;cnt--)

{

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

if ( OrderSymbol() != Symbol()) 계속;

if ( OrderMagicNumber() != MagicNumber) 계속;

if(OrderType() == OP_BUY) NumTrades++;

if(OrderType() == OP_SELL) NumTrades++;

}

반환(NumTrades);

}

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

//| 전문가 시작 기능 |

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

정수 시작()

{

int cnt, 티켓, 합계;

이중 TP;

if(막대<100)

{

Print("막대가 100개 미만입니다.");

리턴(0);

}

총계 = CheckOpenTrades();

if(총 < 1)

{

if(Bid < CurrentLow) CurrentLow = 입찰가;

if(입찰가 >= CurrentLow+(Point*Ret1))

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point),"Albatross_v1",MagicNumber,0,Green);

}

if(총 < 2)

{

if(입찰가 >= CurrentLow+(Point*Ret2))

OrderSend(Symbol(),OP_SELL,Lots*2,Bid+(Point*Ret2),3,Bid+(SL2*Point),Bid-(TP2*Point),"Albatross_v1",MagicNumber,0,Green);

리턴(0);

}

}

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

 

이 질문으로 번거롭게 해서 죄송합니다

색으로 채워진 개체는 어떻게 만드나요??

데이브

<<<

 

안녕하세요. 저는 코더이고 C++로 오랫동안 코딩했지만 FX 및 MQL4에 대한 지식은 매우 기초적입니다. 나는 누군가가 작성한 EA를 철저히 조사하고 코드를 이해하려고 노력하고 있습니다 ...

iMA 방식의 SHIFT 매개변수가 무엇인지 간단한 영어로 설명해 주시겠습니까?

이중 iMA ( 문자열 기호, int timeframe, int period, int ma_shift, int ma_method, int apply_price, int shift )

MT4 도움말에 따르면 " 지표 버퍼 에서 가져온 값의 인덱스(주어진 기간 전의 현재 막대에 대한 상대적 이동)"입니다. - 인디케이터 버퍼란???

그는 또한 다음을하고 있습니다 ...

int RealTime = 0;

if( UseCompletedBars )

{

if(timeprev==Time[0]){return(0);} timeprev = Time[0];

RealTime = 1;

}

double MA11 = iMA(NULL,0,MA1Periods,0,MA1MethodSelected, MA1ArraySelected,0+RealTime);

double MA12 = iMA(NULL,0,MA1Periods,0,MA1MethodSelected, MA1ArraySelected,1+RealTime);

double MA21 = iMA(NULL,0,MA2Periods,0,MA2MethodSelected, MA2ArraySelected,0+RealTime);

double MA22 = iMA(NULL,0,MA2Periods,0,MA2MethodSelected, MA2ArraySelected,1+RealTime);

if( MA11 > MA21 && MA12 < MA22 ) { EnterLong = True; }

if( MA11 MA22 ) { EnterShort = True; }

그것은 무엇을 반환합니까? 나는 교대를 모르기 때문에 그것이 내가 그것을 얻을 수없는 이유라고 생각합니다 ...

귀하의 답변은 매우 감사할 것입니다.

도와주세요.