여러 주문 문제 - 페이지 3

 
luisneves :


안녕하세요 크로닌님

예, 배울 것이 많습니다.... 이제 Global에 있어야 하는 함수 외부에서 액세스할 값이 필요할 때 이해하십시오.

그것은 사실이 아니며 종종 나쁜 생각이기도 합니다.

일부 코드를 함수 로 만드는 이유 중 일부는 해당 코드를 재사용할 수 있기 때문입니다. 함수가 특정 전역 변수와 함께 작동하도록 하드 코딩된 경우 유연성이 떨어질 수 있습니다. 사용자 정의 함수에 변수를 전달하는 것을 고려해야 합니다. . . 항상 전역적으로 선언된 변수를 사용하지 마십시오. 예를 들어:

 //+--------------------------------------------------------------------------------+
//| ToStr function - calls DoubleToString (double, Digits) and returns the string  |
//+--------------------------------------------------------------------------------+
string ToStr( double ValueToString)
   {
   return (DoubleToStr(ValueToString, Digits ));
   }

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

. . . 이것은 전역적으로 선언된 변수를 사용하지 않고 호출될 때 전달된 변수를 사용합니다. . .

 Print ( "Bid price is: " , ToStr(Bid) );
 
luisneves :


안녕하세요 크로닌님

예, 배울 것이 많습니다....이제 글로벌에 있어야 하는 함수 외부에서 액세스할 값이 필요할 때 이해하십시오.

EA도 5자리 브로커에서 실행해야 하므로 외부에 있는 값에 10을 곱합니다. 이 코드 블록을 사용하여 자동으로 가져오지만 WHRoeder에서 금속과 호환되지 않는 조언을 얻습니다.

쌍의 스프레드는 가변적일 수 있습니다. 그렇기 때문에 Stop Level에서 벗어나기 위해 코드를 사용하고 있습니다.

이 문제와 관련하여 " 하지만 모든 주문이 거의 동시에 열리지 않도록 입력 매개변수를 조정했습니다. 기본 매개변수를 확인해야 할 수도 있습니다."

내가 볼 수 있는 한(그렇지 않다면 죄송합니다...), OpenDistance는 2핍으로 유지되고 ReturnDistance는 이제 2핍으로 유지됩니다. 내가 지금 보고 있는 것은 주문이 열리지만 2핍 차이가 아니라는 것입니다. 이것은 ECN 브로커(IC Markets)의 플랫폼에서 테스터로 실행됩니다. 이것이 중요할 수 있습니까?

실제로 주문이 동시에 열리지는 않지만 Open Distance와 ReturnDist가 주문을 열 때까지의 올바른 거리를 고려하지 않는 것 같습니다.

코드에 다음이 있습니다.

OpenOppositeOrder 함수를 호출하기 위해 굵게 표시된 줄을 포함했는데 여기에서 이것이 맞는지 확실하지 않습니다. 다른 쪽은 현재 틱과 2핍 이전에 발생한 마지막 틱(OpenDistance)을 비교한 위치를 볼 수 없습니다.

내 문제로 당신을 지루하게 했다면 죄송합니다.

친애하는

루이스



안녕하세요 크로닌님

나는 왜 스프레드가 무엇인지 묻고 테스터에게 뭔가 잘못되었다는 것에 더 주의를 기울였습니다. 여기에서 스프레드는 50(5자리)이므로 실제로는 5입니다. 흠... 플랫폼을 다시 시작하고 확인하겠습니다.

루이스

 
RaptorUK :

그것은 사실이 아니며 종종 나쁜 생각이기도 합니다.

일부 코드를 함수로 만드는 이유 중 일부는 해당 코드를 재사용할 수 있기 때문입니다. 함수가 특정 전역 변수와 함께 작동하도록 하드 코딩된 경우 유연성이 떨어질 수 있습니다. 사용자 정의 함수에 변수를 전달하는 것을 고려해야 합니다. . . 항상 전역적으로 선언된 변수를 사용하지 마십시오. 예를 들어:

. . . 이것은 전역적으로 선언된 변수를 사용하지 않고 호출될 때 전달된 변수를 사용합니다. . .


안녕하세요 RaptorUK입니다.

올바른 방향으로 나를 유지하기 위해 개입해 주셔서 감사합니다...

그건 그렇고, 내가 테스터의 문제에 관해 언급한 것과 같은 것을 들어본 적이 있습니까? 즉, 금요일 이 아닌 이 순간 스프레드가 50이라는 의미입니까?

친애하는

루이스

 
luisneves :


안녕하세요 RaptorUK입니다.

올바른 방향으로 저를 유지하기 위해 개입해 주셔서 감사합니다...

친애하는

루이스

예, 함수에 대한 아이디어는 실제로 그것들을 모두 무효로 선언하기 위한 것이 아닙니다.... EA가 다시 거래할 수 있도록 LotSize에 대한 무효 MM()에서 선언을 제거했습니다... - 나중에 이야기할 것 같았습니다. 또... :-)

'2핍 레벨 포인트에서 열리지 않음'에서
예를 들어 테스트할 데이터를 틱하지 않았고 스프레드도 2핍 이상입니다(조정할 수 있지만 데이터를 틱하지 않으면 무슨 도움이 될까요?). 이 모든 것이 폐쇄형 정지로 신뢰할 수 있는 것을 테스트하기 어렵게 만듭니다.


16:21:09 _help_53198_markettorderdecnqv80 입력: EquityPercent=1; FixedLotSize=0.01; 승수=2; LotDigits=2; 손절매 = 50; 테이크프로핏=20; TrailingStop=2; 최소 이익 = 3; 미끄러짐=3; 개방 거리=2; 반환 거리=1; 최소 정지 = 1; 매직넘버=8012013; MaxOrders=7;
EURUSD,M1: 1.43310 ok에서 0.01 EURUSD 매수 오픈 #1
EURUSD,M1: 최초 매수 주문 1위
EURUSD,M1: 수정 #1 매수 0.01 EURUSD 1.43310 sl: 1.42810 tp: 1.43510 확인
EURUSD,M1: 1.43257 ok에서 0.01 EURUSD를 오픈 #2 매도
EURUSD,M1: 반대 매도 주문 # 2
EURUSD,M1: #2 수정 0.01 EURUSD에서 1.43257 sl: 1.43757 tp: 1.43057 확인
EURUSD,M1: 1.43283 ok에서 0.01 EURUSD 매수 오픈 #3
EURUSD,M1: 반대 매수 주문 # 3
EURUSD,M1: 수정 #3 1.43283 sl: 1.42783 tp: 1.43483에서 0.01 EURUSD 매수
EURUSD,M1: 1.43230 ok에서 0.01 EURUSD를 오픈 #4 매도
EURUSD,M1: 반대 매도 주문 # 4
EURUSD,M1: #4 수정 0.01 EURUSD에서 1.43230 sl: 1.43730 tp: 1.43030 확인
EURUSD,M1: 1.43280 ok에서 0.01 EURUSD 매수 오픈 #5
EURUSD,M1: 반대 매수 주문 # 5
EURUSD,M1: 수정 #5 매수 0.01 EURUSD 1.43280 sl: 1.42780 tp: 1.43480 확인
EURUSD,M1: 1.43200 ok에서 0.01 EURUSD를 오픈 #6 매도
EURUSD,M1: 반대 매도 주문 # 6
EURUSD,M1: #6 수정 0.01 EURUSD에서 1.43200 sl: 1.43700 tp: 1.43000 확인
EURUSD,M1: 1.43250 ok에서 0.01 EURUSD 매수 #7 오픈
EURUSD,M1: 반대 매수 주문 # 7
EURUSD,M1: 수정 #7 매수 0.01 EURUSD 1.43250 sl: 1.42750 tp: 1.43450 확인
EURUSD,M1: #7 수정 0.01 EURUSD에서 1.43250 sl: 1.43267 tp: 1.43450 확인
EURUSD,M1: 수정 #7 매수 0.01 EURUSD 1.43250 sl: 1.43283 tp: 1.43450 확인
EURUSD,M1: #3 수정 0.01 EURUSD를 1.43283 sl: 1.43300 tp: 1.43483 확인
EURUSD,M1: 수정 #5 매수 0.01 EURUSD 1.43280 sl: 1.43300 tp: 1.43480 확인
EURUSD,M1: #7 수정 1.43250 sl: 1.43300 tp: 1.43450 ok에서 0.01 EURUSD 매수
테스터: 1.43300에서 손절매 #3 (1.43300 / 1.43340)
테스터: 1.43300(1.43300 / 1.43340)에서 손절매 #5
테스터: 1.43300에서 손절매 #7 (1.43300 / 1.43340)
EURUSD,M1: LastClosedTicket=7
EURUSD,M1: ticketnr로 주문: 7 hit SL! 열려 있는 모든 주문 닫기
EURUSD,M1: #6 종가 0.01 EURUSD에서 1.43200 sl: 1.43700 tp: 1.43000 가격 1.43340
EURUSD,M1: #4 종가 0.01 EURUSD에서 1.43230 sl: 1.43730 tp: 1.43030 가격 1.43340
EURUSD,M1: #2 종가 0.01 EURUSD에서 1.43257 sl: 1.43757 tp: 1.43057 가격 1.43340
EURUSD,M1: #1 매수 0.01 EURUSD 1.43310 sl: 1.42810 tp: 1.43510 가격 1.43300

내 관점에서, 그것은 당신이 원하는 것을합니다. OpenOpposite에 대한 계산을 변경하거나 초기 주문을 열지 않았습니다.

 
kronin :

예, 함수에 대한 아이디어는 실제로 그것들을 모두 무효로 선언하려는 것이 아닙니다.... 저는 LotSize가 EA가 다시 거래할 수 있도록 하기 위해 void MM()에서 선언을 제거했습니다... - 나중에 이야기할 것 같았습니다. 또... :-)

'2핍 레벨 포인트에서 열리지 않음'에서
예를 들어 테스트할 데이터를 틱하지 않았고 스프레드도 2핍 이상입니다(조정할 수 있지만 데이터를 틱하지 않으면 무슨 도움이 될까요?). 이 모든 것이 폐쇄형 정지로 신뢰할 수 있는 것을 테스트하기 어렵게 만듭니다.


16:21:09 _help_53198_markettorderdecnqv80 입력: EquityPercent=1; FixedLotSize=0.01; 승수=2; LotDigits=2; 손절매 = 50; 테이크프로핏=20; TrailingStop=2; 최소 이익 = 3; 미끄러짐=3; 개방 거리=2; 반환 거리=1; 최소 정지 = 1; 매직넘버=8012013; MaxOrders=7;
EURUSD,M1: 1.43310 ok에서 0.01 EURUSD 매수 오픈 #1
EURUSD,M1: 최초 매수 주문 1위
EURUSD,M1: 수정 #1 매수 0.01 EURUSD 1.43310 sl: 1.42810 tp: 1.43510 확인
EURUSD,M1: 1.43257 ok에서 0.01 EURUSD를 오픈 #2 매도
EURUSD,M1: 반대 매도 주문 # 2
EURUSD,M1: #2 수정 0.01 EURUSD에서 1.43257 sl: 1.43757 tp: 1.43057 확인
EURUSD,M1: 1.43283 ok에서 0.01 EURUSD 매수 오픈 #3
EURUSD,M1: 반대 매수 주문 # 3
EURUSD,M1: 수정 #3 1.43283 sl: 1.42783 tp: 1.43483에서 0.01 EURUSD 매수
EURUSD,M1: 1.43230 ok에서 0.01 EURUSD를 오픈 #4 매도
EURUSD,M1: 반대 매도 주문 # 4
EURUSD,M1: #4 수정 0.01 EURUSD에서 1.43230 sl: 1.43730 tp: 1.43030 확인
EURUSD,M1: 1.43280 ok에서 0.01 EURUSD 매수 오픈 #5
EURUSD,M1: 반대 매수 주문 # 5
EURUSD,M1: 수정 #5 매수 0.01 EURUSD 1.43280 sl: 1.42780 tp: 1.43480 확인
EURUSD,M1: 1.43200 ok에서 0.01 EURUSD를 오픈 #6 매도
EURUSD,M1: 반대 매도 주문 # 6
EURUSD,M1: #6 수정 0.01 EURUSD에서 1.43200 sl: 1.43700 tp: 1.43000 확인
EURUSD,M1: 1.43250 ok에서 0.01 EURUSD 매수 #7 오픈
EURUSD,M1: 반대 매수 주문 # 7
EURUSD,M1: 수정 #7 매수 0.01 EURUSD 1.43250 sl: 1.42750 tp: 1.43450 확인
EURUSD,M1: #7 수정 0.01 EURUSD에서 1.43250 sl: 1.43267 tp: 1.43450 확인
EURUSD,M1: 수정 #7 매수 0.01 EURUSD 1.43250 sl: 1.43283 tp: 1.43450 확인
EURUSD,M1: #3 수정 0.01 EURUSD를 1.43283 sl: 1.43300 tp: 1.43483 확인
EURUSD,M1: 수정 #5 매수 0.01 EURUSD 1.43280 sl: 1.43300 tp: 1.43480 확인
EURUSD,M1: #7 수정 1.43250 sl: 1.43300 tp: 1.43450 ok에서 0.01 EURUSD 매수
테스터: 1.43300에서 손절매 #3 (1.43300 / 1.43340)
테스터: 1.43300(1.43300 / 1.43340)에서 손절매 #5
테스터: 1.43300에서 손절매 #7 (1.43300 / 1.43340)
EURUSD,M1: LastClosedTicket=7
EURUSD,M1: ticketnr로 주문: 7 hit SL! 열려 있는 모든 주문 닫기
EURUSD,M1: #6 종가 0.01 EURUSD에서 1.43200 sl: 1.43700 tp: 1.43000 가격 1.43340
EURUSD,M1: #4 종가 0.01 EURUSD에서 1.43230 sl: 1.43730 tp: 1.43030 가격 1.43340
EURUSD,M1: #2 종가 0.01 EURUSD에서 1.43257 sl: 1.43757 tp: 1.43057 가격 1.43340
EURUSD,M1: 1위 매수 0.01 EURUSD 1.43310 sl: 1.42810 tp: 1.43510 가격 1.43300

내 관점에서, 그것은 당신이 원하는 것을합니다. OpenOpposite에 대한 계산을 변경하거나 초기 주문을 열지 않았습니다.


안녕하세요 크로닌님

다른 브로커에서 다른 플랫폼을 다운로드 중이며 다시 테스트하고 결과를 알려드릴 때까지 기다릴 것입니다.

다시 감사합니다

루이스

 

안녕하세요 크로닌님

테스터에서 스프레드가 5핍(50)으로 뛰었다는 것을 방금 확인했습니다. 그래서 오늘 Tester에서 코드가 잘 작동하는 것으로 나타났습니다. 이제 ECN Demo 계정 에 코드를 넣어 볼 수 있습니다.

친애하는

루이스

 

안녕하세요 크로닌님

한 가지 문제;

EA가 시작되면 첫 번째 주문을 열기 전에 가격이 2핍을 벗어날 때까지 기다려야 하지 않습니까?

2차 주문 시 열 수 있는 조건이 있어야 올바른 위치에서 열립니다.

친애하는

루이스

 
luisneves :

안녕하세요 크로닌님

한 가지 문제;

EA가 시작 되면 첫 번째 주문을 열기 전에 가격이 2핍을 벗어날 때까지 기다려야 하지 않습니까?

2차 주문 시 열 수 있는 조건이 있어야 올바른 위치에서 열립니다.

친애하는

루이스

안녕 루이스

글쎄, 아마도 그것은 전략에 따라야 할 것이지만 물론 코드에 따르면 ...

 if (OpenDistance*pt && BuyAllowed) //<-- this doesn't make any sense.

위의 내용은 if(2*0.0001 && true) 로 읽힙니다. 0이 아닌 모든 숫자 표현식은 true로 해석됩니다. 따라서 BuyAllowed가 true인 경우 표현식은 항상 true입니다.

죄송합니다. 시리즈의 첫 번째 오프닝에주의를 기울이지 않았고 2핍에 불과하기 때문에 이상한 점을 눈치 채지 못했습니다.

이 시도:

 //global scope
double BuyTrigger,SellTrigger;

//init function
BuyTrigger=Ask+OpenDistance*pt;
SellTrigger=Bid-OpenDistance*pt;

//start function
  OTCurrentTick= OrdersTotal ();                   //reinit OrderTotal   <<-- this is already there, place the 4 lines below after this line
   if (OTCurrentTick== 0 &&OTLastTick> 0 ){
     BuyTrigger=Ask+OpenDistance*pt;
     SellTrigger=Bid-OpenDistance*pt;
  }

if (Ask>BuyTrigger && BuyAllowed)                // <-- use this instead of if (OpenDistance*pt && BuyAllowed)

if (Bid<SellTrigger && SellAllowed)
 

안녕하세요 크로닌님

코드를 이해하는 데 한계가 있어 지루하게 해서 죄송합니다. 그럼에도 불구하고 너무 늦게 배우지 않고 친절하게 제공한 코드를 이해하기 위해 최선을 다하겠습니다.

지금은 사용하기에 가장 좋은 설정을 테스트하고 있으며 업데이트된 마지막 코드를 소개합니다.

이러한 문제(모험... 내 말은....)에서 계속 지원해 주셔서 감사합니다.

루이스

 

안녕하세요 크로닌님

수정 사항이 작동 중입니다. 당신은 최대 주문을 제한했습니다. 대신 모든 주문을 닫을 수 있습니까?

다음 코드로 시도했지만 작동하지 않는 것 같습니다.

 if (LastClosedTicket> 0 || OrdersTotal ()>= MaxOrders)

친애하는

루이스