[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 385

 
granit77 :
빅터, 당신이 틀렸어요. 이 다소 긴 토론 덕분에 두 명의 프로그래머가 도중에 새로 온 사람들의 질문에 답변했으며 이는 분기에만 도움이 되었습니다. :))

글쎄, 나는 그것을 읽는 것을 즐겼다. 그리고 고급의 태도 (나는 지금 당신을 프로그래머라고 부르는 방법을 모릅니다-지금 완전히 혼란 스럽습니다 :)))-말하자면-고급 문제를 해결하는 전문가 :)) 겉보기에 단순한 작업에 대한 그들의 견해 언뜻보기에는 매우 지시적이었습니다. 나는 이것이 모든 차이에도 불구하고 감정적 인 결과가없고 우호적 인 토론이되기를 진심으로 바랍니다. 불행히도 의견 불일치 (해결되지 않음)도 남아있었습니다. 그러나 저는 여기에서 철학적 접근을 공언할 뿐입니다. 이 방법으로 문제에 대한 해결책이 명확하지 않으면 다른 방법을 찾아야 합니다. 그러나 문제에 대해 아는 것은 매우 유용합니다.

토론해주셔서 감사합니다. 그들이 합의에 이르지 못한 것은 유감입니다. (하지만 아직 합의가 이루어지지 않은 상태... ("거기, 저 멀리, 지하철 근처"라는 노래가 기억난다))

물론 Arles에 대한 내 질문에 대한 명확한 답변이 없다는 것은 유감입니다. 나는 이러한 질문이 그와 나뿐만 아니라 흐름과 v.t.를 스스로 구축하기 어렵다고 느끼는 경험이 덜한 많은 전문가들에게도 있다고 생각합니다. 그래서 그들은 고급 전문가가 작성한 프로그램과 셸을 사용합니다.

괜찮습니다. 시간이 지나면 이러한 질문은 사라질 것입니다. :)) 노고에 진심으로 감사드립니다. 결국 긍정적인 태도는 결국 모든 면에 있습니다(해결 방법의 측면에서 다를지라도). 그리고 그것은 기쁘게 생각합니다.

그건 그렇고, 제 교육학 연구에서 저는 종종 다음과 같이 말합니다. 그래서 그들은 ... 지금은 열려 있습니다. (나는 토론의 미묘한 끝을 찾으려고 노력하고있다) 다시 감사합니다!
 
도움이 필요합니다 1 최고 공개 또는 보류 중인 판매 주문 의 가격을 찾는 방법 2 내가 지정한 가격에 공개 또는 보류 중인 판매 주문이 있는지 확인하는 방법
 

Sergey, 어떤 문제가 해결되지 않았습니까? 이 경우:

Chiripaha :

저것들. Arles 의 질문에 답변하고 내 고문 중 한 명이 주문을 설명하고 잠시 동안 "낮잠"을 자면 그 순간에 할당된 자금의 한도를 넘지 않은 다른 고문이 있습니다(예금의 80%로 가정 - 둘 다 고문은 이 크기를 갖습니다) 주문을 할 것입니다(시장별로 거래 입력). 그리고 첫 번째 사람이 작업을 재개할 때(그리고 자금 관리 터미널이 전날 이미 계산된 경우) 고문이 할당한 한도를 이미 초과한 거래도 열 수 있습니까?

이 sit-iu(가상적으로)에 여러 어드바이저가 곱해지면 위험 관리가 중요한 sit-ii에 있을 수 있습니다.

이 멀티스레딩을 올바르게 이해하고 있습니까? - 그렇다면 재정적 관점에서 보면 당연히 엉망입니다. 하지만, 왜냐하면 소규모 계정에서는 이에 대한 확률이 낮으며, 이는 가상일 뿐입니다. 그리고 큰 계정에서는 아마도 스스로 무언가를 작성할 것입니다. 그러나 그럼에도 불구하고 이것이 사실로 밝혀졌습니까?

그리고 제 질문은 - 이것이 공식적인 입장입니까, 아니면 저와 같은 가정과 실험입니까?

그런 다음 378페이지에 코드가 있습니다. 여기 다시 있습니다:

 #property show_inputs

extern int Pause = 1000 ;

int     hwndChart = NULL ; // Уникальный идентификатор скрипта.
string sName = "Condition" ;

void init()
 {
  hwndChart = WindowHandle( Symbol (), 0 );
   // Создаём глобальную переменную синхронизации скриптов.
   if (! GlobalVariableCheck (sName)) GlobalVariableSet (sName, 0 );
 }
 
void deinit()
 {
   GlobalVariableDel (sName);
 }

void start()
 {
   while (! IsStopped ())
   { // Начало блока синхронизации.
     GlobalVariableSetOnCondition (sName, hwndChart, 0 );
     if ( GlobalVariableGet (sName) == hwndChart)
     {
       Print ( "Start" );
       Sleep (Pause); // Имитация работы.
       Print ( "End" );
     }
     GlobalVariableSetOnCondition (sName, 0 , hwndChart);
     // Завершение блока синхронизации.
     Sleep ( 200 );
   }
 }
"모방 작업"이 지연되는 경우 보증금 또는 다른 리소스에 대한 이의 제기를 삽입합니다.

이 동기화 블록은 함수로 변환되어 라이브러리에 배치될 수 있습니다. 모든 고문으로부터 예금에 액세스하는 동기 기능을 갖게 됩니다.

 
인덱스 대신 차트 창의 핸들을 대체
 
FAQ :
인덱스 대신 차트 창의 핸들 대체

정확히! 그런 다음 색인을 사용하면 무엇이 무엇인지 즉시 파악하지 못할 것입니다.

리메이크.

====================

그러나 인덱싱을 통해 전역 변수를 적절하게 삭제할 수 있습니다 .

init에서 인덱스를 감소시켜야 합니다. 인덱스가 0일 때 전역 변수를 제거합니다.

이러한 감소만 삭제 후 스크립트를 다시 로드할 수 없습니다. 지수가 뒤섞입니다.

리소스에 액세스하는 모든 모듈의 인덱스의 전역 배열을 만드는 것이 필요합니다. 글쎄, 그와 함께 일하십시오.

두 개의 전역 변수를 만들 수도 있습니다. 하나는 마지막 인덱스이고 다른 하나는 현재 모듈 수입니다. 인덱스만 증가합니다. 아마도 더 쉬울 것입니다.

또는 전역 변수를 전혀 사용하지 마십시오. 처음 실행하기 전에 수동으로 제거하십시오.

 
이것은 EA가 총 카운터를 감소시키지 않을 때 deinit의 첫 번째 실패까지 제대로 작동합니다.
 
발명! 우리도 동조해야 합니다. indeinite에서 차례를 기다리고 전역 변수 를 0으로 설정하고 종료합니다. 리소스에 대한 액세스는 단기적이며 일반적으로 확정적으로 전달됩니다.
 

1) 작업: 각 스크립트(EA)는 다른 모든 스크립트의 존재를 알아야 합니다.

2) 문제: 실패가 발생하면 실패한 글로벌의 전역이 불안정하게 멈추고 대기열이 중지됩니다.

3) 솔루션:

각 exp는 공통 접두사 + 창 핸들 + 기호라는 이름으로 1개의 전역을 구성합니다. 전역 값은 이 계측기의 마지막 눈금 시간입니다. 자체 핸들이 있는 공통 전역 2개(작동 후 핸들을 기록하거나 가장 오래된 핸들인 경우 재설정)

대기열을 오름차순(핸들)으로 구성하고, 가장 오래된 대기열은 두 번째 전역을 재설정합니다.

각 exp에서 우리는 세 개의 배열(구조가 없는 경우)을 만듭니다. symbol\handle\last access time\last tick time.

모든 전문가는 모두에 대해 (마지막 액세스 시간 \ 마지막 틱 시간)을 추적하고 차이가 발생하는 즉시(exp 중 하나에서 실패) 실패한 전문가의 두 전역이 삭제되고 비활성화된 것으로 간주됩니다. 배열의 셀이 제거됩니다(배열이 다시 작성됨).

대기열이 복원됩니다.

실제로 이것은 가장 활동적인 차트(자주 틱)에 있는 exp에 의해 수행됩니다.

정상적인 deinite에서 각 exp는 자체적으로 정리됩니다.

최대 건너뛰기는 1틱입니다.

추신. 그러나 일반적으로 하나의 다중 통화를 만드는 것이 좋습니다.

 
Zhunko :

Sergey, 어떤 문제가 해결되지 않았습니까? 이 경우:

그런 다음 378페이지에 코드가 있습니다. 여기 다시:

"모방 작업"이 지연되는 경우 보증금 또는 다른 리소스에 대한 이의 제기를 삽입합니다.

이 동기화 블록은 함수로 변환되어 라이브러리에 배치될 수 있습니다. 모든 고문으로부터 예금에 액세스하는 동기 기능을 갖게 됩니다.

이것은 원자적 액세스 블록이며 동기화되지 않습니다. 예금만을 언급하는 것은 의미가 없습니다. 예금 매개변수 함수를 호출하는 것은 트릭 없이 그 자체로 원자적입니다. 원자적으로 완료되면 고문의 모든 작업입니다. 이것이 당신이 문제를 해결하는 방법입니다. 당신은 당신이 뭔가를 했다고 생각하지만 실제로는 환상입니다.

 
FAQ :

1) 작업: 각 스크립트(EA)는 다른 모든 스크립트의 존재를 알아야 합니다.

2) 문제: 실패가 발생하면 실패한 글로벌의 전역이 불안정하게 멈추고 대기열이 중지됩니다.

3) 솔루션:

각 exp는 공통 접두사 + 창 핸들 + 기호라는 이름으로 1개의 전역을 구성합니다. 전역 값은 이 계측기의 마지막 눈금 시간입니다. 자체 핸들이 있는 공통 전역 2개(작동 후 핸들을 기록하거나 가장 오래된 핸들인 경우 재설정)

대기열을 오름차순(핸들)으로 구성하고, 가장 오래된 대기열은 두 번째 전역을 재설정합니다.

각 exp에서 우리는 세 개의 배열(구조가 없는 경우)을 만듭니다. symbol\handle\last access time\last tick time.

모든 전문가는 모두에 대해 (마지막 액세스 시간 \ 마지막 틱 시간)을 추적하고 차이가 발생하면(exp 중 하나에서 실패) 실패한 전문가의 두 전역이 삭제되고 비활성화된 것으로 간주됩니다. 배열의 셀이 제거됩니다(배열이 다시 작성됨).

대기열이 복원됩니다.

실제로 이것은 가장 활동적인 차트(자주 틱)에 있는 exp에 의해 수행됩니다.

정상적인 deinite에서 각 exp는 자체적으로 정리됩니다.

최대 건너뛰기는 1틱입니다.

추신. 그러나 일반적으로 하나의 다중 통화를 만드는 것이 좋습니다.


그는 이해하지 못할 것입니다. 위에서 보는 것은 너무 어렵습니다.))) 나는 거의 같은 스타일로이 문제를 해결했습니다. 문제의 본질에 몰두한 사람이 있다는 것은 좋은 일이다. 나는 여전히 대기열이 정렬되어 있습니다. 작업이 이 순서로 실행되기 시작한 순서와 원에서 더 실행됩니다.