포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 207

 

안녕하세요. 도움이 필요하다.

내 올빼미에서는 아래 MaxOrders 매개 변수에 의해 지정된 금액으로 일련의 주문을 엽니다. 예를 들어, 어떻게 보이는지 표시했습니다. 제비뽑기로 엄격하게 판단하지 마십시오.

1-order-lot=128

2-order-lot=256

3-order-lot=512

4-order-lot=1024

5-order-lot=2048

이것은 테스터를 위한 모든 것입니다.

MaxOrders = 5이고 5개의 주문이 열려 있습니다. 하지만 문제는 브로커 테스터에서 1000랏의 한도가 각각 4개와 5개로, 주문이 정상적으로 열리지 않는다는 점이다.

fxt 파일의 테스터에서 이 매개변수를 변경하는 방법을 찾기 위해 인터넷을 뒤적거렸지만 정확히 수행하는 방법을 찾지 못했습니다.

따라서 이 문제를 해결하기 위해 프로그래밍을 사용하기로 결정했습니다. 그리고 4개 주문에 대해 여러 주문을 열면 2개가 나옵니다.

4-order-lot=1000

4-order-lot=24

주문 5 3:

5-order-lot=1000

5-order-lot=1000

5-order-lot=48

그러나 두 가지 문제가 있습니다

- 최대 로트에 따라 로트로 분할되도록 MM을 올바르게 분할하는 방법

- 추가 주문을 여는 방법이지만 주문을 방해하지 않기 위해 MaxOrders보다 더 많은 주문이 있지만 볼륨을 준수하기 위해 열리는 추가 주문은 계산하지 않습니다.

 
solnce600 :

알렉시! 좋은 오후입니다!

우리의 소통이 머리에서 떠나지 않습니다 ....... 그리고 여기에 이유가 있습니다 .....

코딩과 관련하여 논리가 부족하다는 의견을 자주 듣습니다.

어제 부울 대수(Boolean algebra)가 무엇을 의미하는지 설명해 주셨는데요, 이 주제는 매우 광범위하고 심도 있습니다.

사실 나는 수학적 사고방식도, 대수적 사고방식도 가지고 있지 않습니다.

나는 그다지 복잡하지 않은 수학적인 것들을 이해하지만 .... 즉시 이해하지 못합니다. 그리고 내 두뇌는 복잡한 것을 전혀 인식하지 못합니다.

반년 이상 전에 ML 프로그래밍 자습서를 공부하기 시작하기 전에 나는 의심으로 괴로워했습니다.

수학적 능력이 없어도 이해할 수 있습니까?

그러나 Kozlov는 교과서 서문에서 실제로 모든 것이 처음 보이는 것보다 훨씬 간단하다고 말했습니다.

시력.

그리고 실제로 그의 교과서의 60-70%가 제 생각에 이제 이해할 수 있게 되었고(처음은 아닐 수도 있음) 결과적으로 이미 무언가를 코딩할 수 있습니다.

어제까지는 모든 복잡한 수학 계산(이해할 수 없음)이 프로그램에서 수행되는 것처럼 보였고 다음 규칙만 알면 됩니다.

프로그램이 작동하고 계산합니다.

그러나 어제 우리의 의사 소통은 부울 대수학을 마스터하지 않으면 내 코드에 논리가 없을 것이라는 생각으로 이끌었습니다.

내 코드에 부울 논리가 없으면 내 프로그램이 제대로 작동하지 않거나 전혀 작동하지 않습니다.

그러나 어제 저는 Wikipedia를 보고 깨달았습니다. 부울 대수와 아마도 논리는 제 생각이 아닙니다!

어제, 내 코드의 일부를 대충 훑어본 후, 당신은 그 안에 부울 논리가 없다는 결론을 빠르게 내렸습니다.

괜찮으시다면, 이 단편에서 논리가 부족하다는 결론에 앞서 추론 과정을 설명할 수 없습니다.

내가 당신을 이해한다면, 나는 계속할 것입니다. 만약 - 모르겠다 ..... 아마도 프로그래밍은 내 능력을 훨씬 능가하는 것이라고 결론을 내릴 것입니다.

고맙습니다.

만약 (ot==0)
if (입찰가==가격)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))
if(((종가[1]-낮은[1])>40*포인트)&&((종가[1]-낮은[1])<60*포인트))

Andrey, 모든 것이 그렇게 비극적인 것은 아닙니다! 당신이 이해하는 것을 사용하십시오! 다른 모든 것은 제 시간에 올 것입니다!

예를 들어, Kim의 기능으로 스톱으로 마감하도록 확인한 후 추가 변수 Lot를 입력하고 두 배의 로트로 새 위치를 열기 전에 다음 라인을 작성합니다. Lot = Lot*2.0; 그리고 그게 다야! 그리고 두 배로 늘릴 필요가 없는 일반 로트에 베팅합니다!

간단한 일에 복잡한 코드가 필요한 이유는 무엇입니까? 과학을 위해 그리고 아무도 알아낼 수 없도록? 일종의 "표절" 방지책!

 
borilunad :

Andrey, 모든 것이 그렇게 비극적인 것은 아닙니다! 당신이 이해하는 것을 사용하십시오! 다른 모든 것은 제 시간에 올 것입니다!

예를 들어, Kim의 기능으로 스톱으로 닫기를 확인한 후 추가 변수 Lot를 입력하고 두 배의 로트로 새 위치를 열기 전에 다음 라인을 작성합니다. Lot = Lot*2.0; 그리고 그게 다야! 그리고 두 배로 늘릴 필요가 없는 일반 로트에 베팅합니다!

간단한 일에 복잡한 코드가 필요한 이유는 무엇입니까? 과학을 위해 그리고 아무도 알아낼 수 없도록? 일종의 "표절" 방지책!

보리스! 응원해주셔서 감사합니다. 조금 진정시켜주셨어요....

그러나 여전히 내 코드에 논리가 부족하다는 반복적인 언급이 있습니다.

그리고 가장 화가 나는 것은 그것이 무엇인지 정확히 알 수 없다는 것입니다.

코드에 부울 논리가 없는 것이 중요한 것 같습니다.

그녀가 있는지 아닌지 어떻게 알 수 있습니까?

여기서 Alexey는 이 구절에 없고 실생활에서는 이 조각 때문에 문제가 있을 수 있다고 말했습니다(테스터에서는 모든 것이 정상이지만)

만약 (ot==0)

if (입찰가==가격)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))

if(((종가[1]-저가[1])>40*포인트)&&((종가[1]-저가[1])<60*포인트))

코딩 오류의 경우 MetaEditor가 프롬프트를 표시하거나 터미널의 Journal에서 모든 것이 명확합니다.

그리고 나에게 논리가 없다면 ....... 그것을 어떻게 알 수 있습니까?보다 경험이 많은 동지들의 요청에 의해서만.

그러나 그들의 속삭임에도 불구하고 나는 그들이 구체적으로 무엇을 말하는지 이해하지 못합니다.

부울 대수를 배우는 것은 나에게 비현실적입니다.

 

예, 이 부울 대수를 망치고 더 이상 기억하지 마십시오.

농담:

한 정신과 교수가 정신질환자를 위한 병원을 찾아 주치의에게 환자가 회복됐는지, 아직 아픈지 어떻게 판단하는지 물었다.

- 우리는 목욕을 물로 채우고 가장자리에 숟가락으로 찻잔을 놓고 환자에게 물을 제거하도록 제안합니다.

- 아마도 환자가 건강하면 숟가락이 아닌 컵을 가져가겠죠?

- 환자가 건강하면 욕조에서 코르크 마개를 꺼냅니다.

* * *

코드에서 수행하려는 작업이 합리적인지 여부에 대한 질문에 스스로 답할 수 있어야 하며 그렇게 어려운 질문은 아닙니다.

열기[1]-닫기[1]은 음수일 수 있습니다. 변종에서 닫기>열기인 경우를 의미하고 케이스 닫기<열기 - 다른 변종에서. 또는 양초의 방향에 의존하지 않도록 몸체의 크기를 계산하십시오.

 
solnce600 :

보리스! 응원해주셔서 감사합니다. 조금 진정시켜주셨어요....

그러나 여전히 내 코드에 논리가 부족하다는 반복적인 언급이 있습니다.

그리고 가장 화가 나는 것은 그것이 무엇인지 정확히 알 수 없다는 것입니다.

코드에 부울 논리가 없는 것이 중요한 것 같습니다.

그녀가 있는지 아닌지 어떻게 알 수 있습니까?

여기서 Alexey는 이 구절에 없고 실생활에서는 이 조각 때문에 문제가 있을 수 있다고 말했습니다(테스터에서는 모든 것이 정상이지만)

만약 (ot==0)

if (입찰가==가격)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))

if(((종가[1]-저가[1])>40*포인트)&&((종가[1]-저가[1])<60*포인트))

코딩 오류의 경우 MetaEditor가 프롬프트를 표시하거나 터미널의 Journal에서 모든 것이 명확합니다.

그리고 나에게 논리가 없다면 ....... 그것을 어떻게 알 수 있습니까?보다 경험이 많은 동지들의 요청에 의해서만.

그러나 그들의 속삭임에도 불구하고 나는 그들이 구체적으로 무엇을 말하는지 이해하지 못합니다.

부울 대수를 배우는 것은 나에게 비현실적입니다.

"악마는 그가 그린 것만큼 끔찍하지 않다!" 먼저 코드를 읽을 수 있게 만들고 추가 괄호와 불필요한 조건을 제거한 다음 이러한 조건이 필요한 이유를 알려줄 것입니다!

 if (ot== 0 )                    //если Buy, значит эти условия для закрытия или модификации?!

if (Bid==Price)               //это не будет работать на Реале! 
                               //Надо так: (Bid>=Price) или (Bid<=Price) в зависимости от направления
if (Open[ 1 ]-Close[ 1 ]> 100 * Point & & Open[1]-Close[1]<120*Point)
if (High[ 1 ]-Open[ 1 ]> 40 * Point   && High[1]-Open[1]<60*Point)  

if (Close[ 1 ]-Low[ 1 ]> 40 * Point   && Close[1]-Low[1])<60*Point) 

 
borilunad :

"악마는 그가 그린 것만큼 끔찍하지 않다!" 먼저 코드를 읽을 수 있게 만들고 추가 괄호와 불필요한 조건을 제거한 다음 이러한 조건이 필요한 이유를 알려줄 것입니다!

내가 왜 이러한 추가 조건이 필요한지 말합니다.

프로그램이 1포인트 간격으로 양초의 특정 매개변수를 계산하도록 퍼니스에 보낸 조건이 필요합니다.

즉, 특정 바디 크기를 가진 약세 양초, 시가와 고가 사이의 특정 크기, 저가와 종가 사이의 특정 크기 거리.

이러한 목적을 위해 제가 틀리지 않았다면 NormalizeDouble(MathAbs())을 사용할 수도 있는 것으로 알고 있습니다만, 저는 이 옵션과 제가 사용한 옵션의 차이점을 중요하게 생각하지 않았습니다.

 
solnce600 :

내가 왜 이러한 추가 조건이 필요한지 말합니다.

나는 프로그램이 양초의 특정 매개 변수를 계산하도록 퍼니스에 보낸 조건이 필요합니다. +, - 1 포인트.

즉, 시가와 고가 사이의 특정 크기, 저가와 종가 사이의 특정 크기를 가진 특정 바디 사이즈의 약세 양초입니다.

이러한 목적을 위해 제가 틀리지 않았다면 NormalizeDouble(MathAbs())을 사용할 수도 있는 것으로 알고 있습니다만, 저는 이 옵션과 제가 사용한 옵션의 차이점을 중요하게 생각하지 않았습니다.

그런 다음 위를보고 수정하십시오!
 
Integer :

예, 이 부울 대수를 망치고 더 이상 기억하지 마십시오.

농담:

한 정신과 교수가 정신질환자를 위한 병원을 찾아 주치의에게 환자가 회복됐는지, 아직 아픈지 어떻게 판단하는지 물었다.

- 우리는 목욕을 물로 채우고 가장자리에 숟가락으로 찻잔을 놓고 환자에게 물을 제거하도록 제안합니다.

- 아마도 환자가 건강하면 숟가락이 아닌 컵을 가져가겠죠?

- 환자가 건강하면 욕조에서 코르크 마개를 꺼냅니다.

* * *

코드에서 수행하려는 작업이 합리적인지 여부에 대한 질문에 스스로 답할 수 있어야 하며 그렇게 어려운 질문은 아닙니다.

열기[1]-닫기[1]은 음수일 수 있습니다. 따라서 Close>Open이 하나의 옵션인 경우 Close<Open이 또 다른 옵션입니다. 또는 양초의 방향에 의존하지 않도록 몸체의 크기를 계산하십시오.

일화 감사합니다..... 앞으로는 교통체증만 생각하려고 합니다.

그러나 여전히 ... 이 지점의 권위 있는 사람들이 내 코드에 논리가 없다고 반복적으로 동시에 말할 때 .... 나중에 부울에서 밝혀지듯이 .... 부울 대수를 잊어버린다는 것은 이 지점의 진지한 전문가들.... 내 손이 바로 여기까지 올라가지 않을 것입니다.... 아니면 아예 안 올라갈 수도 있습니다..... 저는 아직 시도하지 않았습니다.

 
borilunad :
그런 다음 위를보고 수정하십시오!

그래서 추가 괄호가 많았습니까? 그리고 그것들은 해롭습니까?

글쎄, 내가 이 대괄호를 썼을 때 컴파일러가 나에게 오류를 주지 않았다면 .... 나는 모든 것이 괜찮다고 생각했다.

최근까지 나는 컴파일러가 맹세하지 않고 어드바이저가 코드에 따라 테스터에서 작업하면 이것이 확실히 괜찮다고 생각했습니다.

별로 안맞는듯....

 
solnce600 :

보리스! 응원해주셔서 감사합니다. 조금 진정시켜주셨어요....

그러나 여전히 내 코드에 논리가 부족하다는 반복적인 언급이 있습니다.

그리고 가장 화가 나는 것은 그것이 무엇인지 정확히 알 수 없다는 것입니다.

코드에 부울 논리가 없는 것이 중요한 것 같습니다.

그녀가 있는지 아닌지 어떻게 알 수 있습니까?

여기서 Alexey는 이 구절에 없고 실생활에서는 이 조각 때문에 문제가 있을 수 있다고 말했습니다(테스터에서는 모든 것이 정상이지만)

만약 (ot==0)

if (입찰가==가격)
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))

if(((종가[1]-낮은[1])>40*포인트)&&((종가[1]-낮은[1])<60*포인트))

코딩 오류의 경우 MetaEditor가 프롬프트를 표시하거나 터미널의 Journal에서 모든 것이 명확합니다.

그리고 나에게 논리가 없다면 ....... 그것을 어떻게 알 수 있습니까?보다 경험이 많은 동지들의 요청에 의해서만.

그러나 그들의 속삭임에도 불구하고 나는 그들이 구체적으로 무엇을 말하는지 이해하지 못합니다.

부울 대수학을 배우는 것은 나에게 비현실적입니다.


조건을 명확하게 설명하기 위해 부울 대수학의 전문가가 될 필요는 없습니다...

당신의 삶을 조금 더 쉽게 만들어 드리겠습니다... if 를 일반적인 if 로, elseelse 로, &&and 로, ||또는 등 ... 그러면 평범한 단어로 쓰여진 것을 읽거나 쓰고 싶은 것을 결정할 수 있습니다.

귀하가 작성한 내용(지금은 조건에 대한 잘못된 설명을 생략합니다):

1. if (ot==0) 시장가 주문이 없는 경우(시장가 주문이 전혀 없고, 시장가도 없고, 보류도 아니고, 이 EA, 다른 EA 또는 수동으로 열리지 않음)... 그렇다면 2행이 실행됩니다. , 그렇지 않은 경우 3행으로 이동합니다.

2. if (Bid==Price) 가격이 현재 캔들의 시가와 같으면... 그렇다면 3행이 실행되고, 그렇지 않으면 4행으로 이동합니다.

3. if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point)) 첫 번째 캔들의 시가가 더 클 경우 첫 번째 캔들의 종가보다 100포인트 이상 120포인트 미만... 그렇다면 4행이 실행되고, 그렇지 않으면 5행으로 이동합니다.

4. if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point)) 40점 이상 60점 미만.. 그렇다면 5행이 실행되고, 그렇지 않으면 6행으로 이동합니다.

5. if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point)) 첫 번째 캔들의 종가가 다음보다 높을 경우 첫 번째 캔들스틱의 저점은 40포인트 이상 60포인트 미만입니다... 그렇다면 6행이 실행되고, 그렇지 않으면 7행으로 이동합니다.

6.

7.

이 확장에서 볼 수 있듯이 코드의 모든 라인을 순차적으로 실행하거나(각각이 true를 반환하는 경우) 또는 false를 반환하는 라인 다음에 오는 라인을 건너뜁니다.

조건에서 혼동되지 않고 논리를 올바르게 구성 하려면 true 값 뒤에 한 행을 실행해야 하는지 아니면 전체 블록을 실행해야 하는지에 관계없이 모든 연산자를 중괄호로 묶습니다.

예를 들어:

 if (ot== 0 ) {
   if (Bid==Price) {
       // сюда можно вписать целый блок, который будет исполняться лишь при одном условии, что bid==Price
       // только вот вряд ли он когда-либо исполнится в реале
      }
   }
따라서 위의 내용을 기반으로 코드를 구성 요소로 분해하고 이 경우 불필요한 추가 대괄호를 제거하십시오...