프로그래밍 방법을 배울 수 있도록 도와주세요. - 페이지 3

 
Tio Nisla :
이전에 somefunc() 함수가 금액을 반환하는 것 외에도 거래 매개변수를 계산하는 것과 같은 다른 조작을 수행하면 이러한 사용이 미묘한 아티팩트를 생성하고 코드 작성자를 혼미: "어??? 4번은 어때??? O_o F$#@!!! 거기도 3번은 있어야지? 고문은 왜 나에게 거짓말을 하는거야?" 이것은 내가 "shitcode"라고 불렀던 것인데, 그의 머리카락 뿌리까지 전문가를 격분시켰습니다. 나는 분명히 초점을 맞추지 않았지만 당신은 나를 위해 그것을했습니다. 그러나 배열을 재초기화하지 않고 동적으로 계산되는 인덱스로 주소를 지정하는 것이 무엇인지는 고려하지 않았습니다. 베어 "sya"에서 이것은 일반적으로 예외 및 해당 핸들러에 대한 스마트 포인터 및 배열이 있는 "플러스"에서 GPF로 이어집니다. mql에서는 이유가 명확하지 않습니다.

그리고 "찾기 어려운 유물"은 무엇입니까? 이것은 종교의 영역에서 무엇인가? 직접 생각해 낸 것입니까, 직접 믿습니까?

 
Aleksandr Slavskii :

여러분, 개인은 개인이지만 진실을 알아보도록 합시다.

나는 이 예에서   총 포지션 ()   루프의 모든 반복에서 호출됩니다.

Dmitry는 컴파일러가 다르게 작동한다고 주장합니다. 난 이해가 안 돼요. 설명하다.

그 기능을 말하고 싶다면   PositionsTotal ()은 매번 위치를 다시 계산하지 않고 단순히 열린 위치의 수가 기록된 변수의 값을 반환합니다. 그렇습니다. 맞습니다. 다른 변수를 선언할 의미가 없습니다. 컴파일러가 그것과 관련이 있습니까?

그리고 이 함수가 매번 열린 위치를 다시 계산하면 컴파일러는 이 함수의 값이 추가 계산에 영향을 미치는지 여부를 이해하고 이를 기반으로 함수나 변수를 대체해야 합니다.

뭔가 잘 되지 않습니다.

매번 다시 계산하거나 다시 계산하지 않지만 확실히 PositionTotal()을 호출하는 것은 비용이 많이 듭니다. 그리고 이것은 간단한 실험으로 쉽게 증명됩니다. 그러나 나를 산산이 부숴버릴 살인적인 실험을 제기하는 대신 "알기 힘든 인공물"을 사용한 환상적인 주장이 발명되고 있습니다. 코드 예제는 알고 있는 첫 페이지에서 찾을 수 있고 어떻게 보이는지 볼 수 있습니다))) 포럼에 삽입하기 전에 특별히 수정되었습니다(큰 박수). 그리고 이것은 초보자가 불필요하게로드되지 않도록 만 수행되었습니다.

그리고 컴파일러 - 코드를 최적화하고 변수가 함수를 통하지 않고 직접 액세스됨을 의미합니다.

 int x;

for (;i<x;)

и

for (;i<F();)

int F(){ return (x);}

이것은 ArraySize() 함수에서 매우 두드러지며, 함수 호출과 변수 사용의 차이점을 구분하지 못합니다. 그러나 이것은 PositionsTotsl()의 경우가 아닙니다.

그건 그렇고, 당신은 여전히 루프 내부의 변수 선언의 맨 아래에 도달할 수 있으며, 이것은 또한 속도를 감소시킵니다. 통과하지 못한 것은 무엇입니까? 몰라요? 여기에서 논쟁의 여지가 있지만 4와 5 사이에는 차이가 있습니다.

 

PositionsTotal()은 매번 열린 위치 의 수를 정확히 묻습니까? 아니면 업데이트 플래그를 사용하여 값을 최적화하고 상수에 저장하고 변경되지 않으면 항상 동일한 숫자를 반환합니까?)

확실히 이 기능에는 일종의 내부 최적화가 있습니다. 개발자는 "그리고 그렇게 될 것입니다"라는 중요하고 잠재적으로 비용이 많이 드는 기능을 수행하는 바보가 아닙니다.

분개하신 분들은 동일한 주기의 두 버전을 완료하는 데 얼마나 많은 시간과 리소스가 필요한지 확인하십시오.

똥을 던질 필요가 없습니다.


순전히 학문적 관심에서 PositionTotal()의 소스 코드를 보고 싶습니다.


네, 생각해보면 가장 쉬운 방법은 이 값을 저장할 전역 터미널 변수를 만드는 것입니다. 그리고 이 값만 반환합니다. 그리고 포지션을 열거나 닫을 때 업데이트하고, 변수를 확보하고, 동기화하여 하나님이 금지하는 잘못된 것이 거기에 기록되도록하십시오.

대충 그렇게 된 것 같아요.

글쎄요, 위치 자체에 대한 데이터도 있습니다. 일부 데이터 구조에 저장되어 있을 수 있으므로 서버에 다시 한 번 연락하지 않고도 얻을 수 있습니다. 일반적으로 for/call의 모든 버전에서 성능과 함께 모든 것이 괜찮다고 생각합니다.


그리고 코드 스타일이 미학적으로 아름다운지 아닌지는 모두가 스스로 결정합니다)

 
Nikolay Mitrofanov :

분개하신 분들은 동일한 주기의 두 버전을 완료하는 데 얼마나 많은 시간과 리소스가 필요한지 확인하십시오.

똥을 던질 필요가 없습니다.

Dmitry가 저에게 의심의 여지가 없는 권위자이기 때문에 이것이 저를 위한 것이 아니었기를 바랍니다.   티오 니슬라   또한 분명히 첫날 코딩은 아니지만


배우는 중이라서 질문드립니다.

 

PositionsTotal()에는 문제가 있습니다. 위치 수가 변경되자마자 값을 변경하면서 항상 올바른 수를 반환해야 합니다. 따라서 단순히 변수에 액세스하거나 ArraySize() 함수를 호출하는 것만큼 빠르지는 않습니다.

 
Aleksandr Slavskii :

...


배우는 중이라서 질문드립니다.

당신이 배우고 있다면, 이 작은 일들에 전혀 신경쓰지 마십시오. 아이디어를 코드로 변환하는 기능(또는 모호하게 정의된 프로세스를 일련의 작업으로 변환하는 기능)에 집중하세요. 그런 다음 코드를 원하는 대로 빗질할 수 있습니다.

 
Dmitry Fedoseev :

당신이 배우고 있다면, 이 작은 일들에 전혀 신경쓰지 마십시오. 아이디어를 코드로 변환하는 기능(또는 모호하게 정의된 프로세스를 일련의 작업으로 변환하는 기능)에 집중하세요. 그런 다음 코드를 원하는 대로 빗질할 수 있습니다.

그리고 나에게는 너무 좋은 사람이 그것을 알아 내려고 더 깊이 파고 든다..

그런 다음 인코더는 작은 것에 주의를 기울이지 않고 무작위로 코드를 작성하는 습관을 들이게 됩니다. 그런 다음 코드를 결합한다는 것은 이중 작업을 수행하는 것을 의미하며, 종종 작성자뿐만 아니라 코드로 작업할 만큼 운이 좋은 사람들을 위한 것입니다.

글을 제대로 쓰는 방법을 알 수 있고, 세세한 부분을 이해하면서 바로 잘 쓸 수 있다면, 왜 무작위로 글을 쓰는가?)

당신의 조언 .. 글쎄, 이것은 .. IMHO


당신의 조언은 머리를 빗을 수 있는 경험 많은 프로그래머(자신감이 강한)에게 좋은 것입니다.

 
Nikolay Mitrofanov :

그리고 나에게는 너무 좋은 사람이 그것을 알아 내려고 더 깊이 파고 든다..

그런 다음 인코더는 작은 것에 주의를 기울이지 않고 무작위로 코드를 작성하는 습관을 들이게 됩니다. 그런 다음 코드를 결합한다는 것은 이중 작업을 수행하는 것을 의미하며, 종종 작성자뿐만 아니라 코드로 작업할 만큼 운이 좋은 사람들을 위한 것입니다.

글을 제대로 쓰는 방법을 알 수 있고, 세세한 부분을 이해하면서 바로 잘 쓸 수 있다면, 왜 무작위로 글을 쓰는가?)

당신의 조언 .. 글쎄, 이것은 .. IMHO


당신의 조언은 머리를 빗을 수 있는 경험 많은 프로그래머(자신감이 강한)에게 좋은 것입니다.

초보자의 경우 더욱 그렇습니다. 어떻게든 문제를 해결하는 것이 좋지만 "여기에 const 없이 어떻게 쓸 수 있지만 정적 등 없이 여기에 쓸 수 있습니까?" 또는 - 오 친구 , 그런 질문을 던진다면 프로그래밍에 아예 접근하지 않는 것이 좋을 것입니다."

for(int i=0;i<Bars;i++)와 같은 코드로 수정 지시자를 보내지 않는 데 일주일이 걸리지 않습니다. 그리고 여기에 가속을 줄 수 있는 문지름 문제가 있습니다. 음, 30%입니다.

심지어 효과적인 Expert Advisors(테스트 중 작업 속도 측면에서)도 알고리즘의 문제이며, 구문 미묘함의 문제가 아니라 상황에 따라, 각각의 특정 전략에 대해 매번 다시 태어난다.

 
Dmitry Fedoseev :

초보자의 경우 더욱 그렇습니다. 어떻게든 문제를 해결하는 것이 좋지만 "여기에 const 없이 어떻게 쓸 수 있지만 정적 등 없이 여기에 쓸 수 있습니까?" 또는 - 오 친구 , 그런 질문을 던진다면 프로그래밍에 아예 접근하지 않는 것이 좋을 것입니다."

for(int i=0;i<Bars;i++)와 같은 코드로 수정 지시자를 보내지 않는 데 일주일이 걸리지 않습니다. 그리고 여기에 가속을 줄 수 있는 문지름 문제가 있습니다. 음, 30%입니다.

초보 프로그래머 가 포럼에서 무언가를 묻는다면 그것은 그가 답을 알고 싶어한다는 것을 의미하고 그가 관심이 있고 그것을 필요로 한다는 것을 의미합니다. 조언을 얻기 위해 화제를 만들기도 했다.

내가 주제의 저자를 올바르게 이해했다면 그의 아이디어를 그 앞에서 구현하는 문제는 더 이상 "어쨌든 일을하기 위해"가 아니라 가능한 한 즉시 최선을 다하고 올바르게 수행하는 방법입니다. 이것은 좋은 것입니다. 맞습니다.

모든 활동에 대해 "적어도 어떻게든"은 끔찍한 접근 방식입니다.

먼저 이해한 다음 지식으로 수행하십시오.

 
Nikolay Mitrofanov :

초보 프로그래머 가 포럼에서 무언가를 묻는다면 그것은 그가 답을 알고 싶어한다는 것을 의미하고 그가 관심이 있고 그것을 필요로 한다는 것을 의미합니다. 조언을 얻기 위해 화제를 만들기도 했다.

내가 주제의 저자를 올바르게 이해했다면 그 앞에서 그의 아이디어를 구현하는 문제는 더 이상 "어쨌든 일을하기 위해"가 아니라 가능한 한 최선을 다하고 올바른 방법으로 즉시 수행하는 것입니다. 이것은 좋은 것입니다. 맞습니다.

모든 활동에 대해 "적어도 어떻게든"은 끔찍한 접근 방식입니다.

먼저 이해한 다음 지식으로 수행하십시오.

무엇에 대한 지식으로? 이 알고리즘이 자연에 존재하지 않지만 직접 발명해야 하고 모든 것을 결정하는 사람은 그 사람입니다.