//------------------------------------------------ ------------------------------+ // 김 존경하고 존경합니다 !!! | //+----------------------------------------------- ------------------------------+
이것은 의심할 여지 없이 코드에서 가장 스트레스가 많은 부분이었습니다.))))
그래서. 나는 여기에서 아무것도 이해하지 못한다. 두 번째 TF가 떠올랐습니다. 모든 것이 시계처럼 작동해야 합니다. 하지만 작동하지 않습니다. 아니요, 작동하지만 예상대로 작동하지 않습니다. 나는 모든 것을 천 번 확인했습니다. 나는 구문 또는 알고리즘 오류를 직접 보지 못했습니다. 전체 코드를 첨부하여 설명하겠습니다. 그래서:
Δtime= TimeCurrent ()-time; //перестраховка на случай, если TimeCurrent() во время выполнения цикла изменитсяswitch (Δtime){
case0 : //если секунда не прошла
AccumulatorOfTicks( false ); //заносим в массив-накопительbreak ;
case1 : //если прошла ОДНА секунда после последнего тика
WriteBar(); //по предыдущему тику рисуем свечу
AccumulatorOfTicks( true ); //и ловим текущий тикbreak ;
default : //если прошло НЕСКОЛЬКО секунд после последнего тика
WriteBar(); //по предыдущему тику рисуем свечу
Δtime--; time++; //уменьшаем разницу на единицу, т.к. свечу уже нарисовалиwhile (Δtime!= 0 ) WriteDash(); //и рисуем прочерки по кол-ву пропущ. сек. минус один
AccumulatorOfTicks( true ); //ловим текущий тик
}
여기에서 start() 시작 시 마지막 start() 실행 이후 경과된 시간(초)으로 핸들러를 설정했습니다. 반복 섹션을 사용자 정의 기능으로 이동했습니다. 새로운 값 time=TimeCurrent()는 사용자 정의 함수에서 같은 위치에 할당됩니다.
이 함수는 두 가지 모드에서 작동합니다. 첫 번째 분기인 AtFirst=true에서는 누산기 배열의 예비 제로화와 함께 틱만 포착하고 두 번째 분기인 AtFirst=false에서는 틱 누산기처럼 정확히 작동합니다. 즉, 누산기를 재설정하고 자르고 제로 셀에서 입찰가를 잡거나 누산기를 길게하고 입찰가를 잡습니다. 디버깅용으로만 설정된 경고입니다. 드라이브를 재설정하기 위한 조건을 더 적어보겠습니다.
void WriteBar(){
if ( FileSeek (hand1e, fpos, SEEK_SET ) == false ){ //перемещаем указатель на новую позицию, которую мы запомнили в FileTell//проверяем, переместилось-не переместилось, это я убрал, т.к. к вопросу не относится.
} else {
FileWriteInteger (hand1e, time, LONG_VALUE); //TimeCurrent()FileWriteDouble (hand1e, bid[ 0 ], DOUBLE_VALUE); //Open[]FileWriteDouble (hand1e, bid[ ArrayMaximum (bid)], DOUBLE_VALUE); //High[]FileWriteDouble (hand1e, ask[ ArrayMinimum (ask)], DOUBLE_VALUE); //Low[]FileWriteDouble (hand1e, ask[ ArraySize (ask)- 1 ], DOUBLE_VALUE); //Close[]FileWriteDouble (hand1e, ArraySize (ask), DOUBLE_VALUE); //Volume[]FileFlush (hand1e);
fpos = FileTell (hand1e); //запоминаем позицию записи в файлеif ( ArraySize (ask)== 2 ) Alert ( StringConcatenate (TimeToStr( TimeCurrent (), TIME_SECONDS), " - volume = " , ArraySize (ask)));
if (bid[ 0 ]==ask[ ArraySize (ask)- 1 ]) Alert ( StringConcatenate (TimeToStr( TimeCurrent (), TIME_SECONDS), " - bid=ask, Ticks = " , ArraySize (ask)));
/*Необходимое пояснение. Хотя код рассчитан в т.ч. на тени свечей (т.е. независимыми от Open и Close
High и Low), в реальности их на чарте не будет, т.к. в секунде максимум 2 тика, три тика в секунде
я ещё не встречал. Поэтому в массиве из двух элементов (т.е. двух тиков)
один будет максимумом, другой минимумом, - и невольно совпадать с Open и Close.*/
}
}
양초 "그리기" 기능(오프라인 차트에서 열린 .hst에 양초 놓기). 마찬가지로 - 디버깅에 대한 경고를 설정합니다. 첫 번째 경고는 1초에 두 개의 포착된 틱에서 신호음을 울리고(배열 크기는 2이고 이론상 볼륨은 2와 같아야 함), 두 번째 경고는 포착된 눈금의 물음과 동일한 입찰가에서(경고와 유사합니다. 드라이브에서 : 그러나 어떤 이유로 그들은 동기화되지 않습니다.) , 양초의 볼륨. 이것은 이론적으로 모두 사실이며, 예를 들어 듀스(또는 0x00 00 00 00 00 00 00 40, double 2.0)와 같은 파일(경보에 따라)에 입력할 때 어떤 이유로 여전히 하나(0x00 00 00 00 00 00 F0 3F, BigEndian 형식의 두 배 1.0). 나는 일반적으로 드라이브에서 경고를 주석 처리합니다. 종종 경고음이 울립니다. 이 두 가지를 사용하여 작업합니다.
void WriteDash(){
if ( FileSeek (hand1e, fpos, SEEK_SET ) == false ){ //перемещаем указатель на новую позицию, которую мы запомнили в FileTell//аналогично убрал, т.к. к вопросу не относится.
} else { //ставим прочерк на Close[0]
Δtime--; time++;
FileWriteInteger (hand1e, time, LONG_VALUE); //TimeCurrent()FileWriteDouble (hand1e, ask[ ArraySize (ask)- 1 ], DOUBLE_VALUE); //Open[]FileWriteDouble (hand1e, ask[ ArraySize (ask)- 1 ], DOUBLE_VALUE); //High[]FileWriteDouble (hand1e, ask[ ArraySize (ask)- 1 ], DOUBLE_VALUE); //Low[]FileWriteDouble (hand1e, ask[ ArraySize (ask)- 1 ], DOUBLE_VALUE); //Close[]FileWriteDouble (hand1e, 0 , DOUBLE_VALUE); //Volume[]FileFlush (hand1e);
fpos = FileTell (hand1e); //запоминаем позицию записи в файле
}
}
틱이 전혀 없는 경우 대시를 "그리기"하는 기능입니다. 모든 것은 다음 알고리즘에 따라 작동합니다.
Δtime=0: catch(복사) 틱.
Δtime=1: 이전에 포착한 눈금을 기준으로 촛대를 그린 다음 눈금을 포착합니다(누적기의 예비 영점 조정).
Δtime>1: 이전에 포착한 진드기에 양초를 그리고Δtime-1의 양으로 Close[0] 라인을 따라 대시를 그리고 진드기를 포착합니다(누적기의 예비 영점화 사용). 모든 경우에 촛불이 이미 그려지면 드라이브를 재설정하므로 더 이상 배터리가 필요하지 않습니다. 이것은Δtime>0일 때 발생합니다.
우리는 운전:
나는 입찰가가 매도호가와 같아야 하고 거래량이 1과 같아야 하는 순간을 화살표로 그렸습니다. 볼륨으로 바닥을 캡처하지 않았으며 여전히 볼 수 있는 것이 없습니다. 그러나 그것들은 모두 동등합니다. 즉, 0 또는 1 중 어느 것도 2로 올라가지 않습니다(경고가 울리지만). 초당 두 틱 - 모두 동일합니다. 마우스를 가져가면 volume=1이 표시되고 입찰가가 물음과 같으면 volume=0도 표시됩니다. 왜요? 어딘가에 오류가 있다는 것을 이해하지만 오류를 눈치채지 못하거나 잘못된 위치를 찾고 있을 가능성이 큽니다. 나는 코드를 첨부하고 있고, 내 부분에서 모든 것을 잘 설명하고, 모든 곳에서 들여쓰기를 따르고, 포함자를 제거하고, 더 빨리 컴파일하기 위해 사용되는 함수만 선택했습니다. 유일한 언급은 오프라인입니다. TimeLocal을 사용하면 원래 틱 컬렉터와 달리 작동하지 않습니다. 왜냐하면 if(tickTimeLocal==true) 에서 (나를 해치지 않았기 때문에) 헛소리에서 거기에 썼기 때문입니다. Taras의 조언에 따라 고문에게 이체를 시도했습니다. 그러면 오프라인 차트에 양초가 표시되지 않습니다(현재 시세의 선은 정상적으로 이동하지만).
경보가 2와 같으면 분에서 표시기를 제거하고 촛불 위로 마우스를 이동합니다... 볼륨=1.
나는 FileInsight(디버거와 같은)를 통해 hst에서 RateInfo를 보았고 아마도 볼륨이 두 배가 아닌 int가 있을 수 있다고 생각합니다. 아니요, 두 배입니다 ...
나는 당신의 코드를 보았다 .... 당신은 너무 혼란스러워)))
나는 우리가 메모리에 저장하기에 충분하기 때문에(또는 현재 막대가 HST로 작성되어야 하기 때문에 저장하지 않아도 됩니다. 그렇지 않으면 차트가 업데이트되지 않음) 현재 막대는 6개의 TOHLCV 숫자이며 틱이 도착하면 필요에 따라 업데이트하고 지정된 조건( TimeCurrent() -O>1) 절단 막대에 따라 업데이트합니다.
//------------------------------------------------ ------------------------------+
// 김 존경하고 존경합니다 !!! |
//+----------------------------------------------- ------------------------------+
이것은 의심할 여지 없이 코드에서 가장 스트레스가 많은 부분이었습니다.))))
그래서. 나는 여기에서 아무것도 이해하지 못한다. 두 번째 TF가 떠올랐습니다. 모든 것이 시계처럼 작동해야 합니다. 하지만 작동하지 않습니다. 아니요, 작동하지만 예상대로 작동하지 않습니다. 나는 모든 것을 천 번 확인했습니다. 나는 구문 또는 알고리즘 오류를 직접 보지 못했습니다. 전체 코드를 첨부하여 설명하겠습니다. 그래서:
여기에서 start() 시작 시 마지막 start() 실행 이후 경과된 시간(초)으로 핸들러를 설정했습니다. 반복 섹션을 사용자 정의 기능으로 이동했습니다. 새로운 값 time=TimeCurrent()는 사용자 정의 함수에서 같은 위치에 할당됩니다.
이 함수는 두 가지 모드에서 작동합니다. 첫 번째 분기인 AtFirst=true에서는 누산기 배열의 예비 제로화와 함께 틱만 포착하고 두 번째 분기인 AtFirst=false에서는 틱 누산기처럼 정확히 작동합니다. 즉, 누산기를 재설정하고 자르고 제로 셀에서 입찰가를 잡거나 누산기를 길게하고 입찰가를 잡습니다. 디버깅용으로만 설정된 경고입니다. 드라이브를 재설정하기 위한 조건을 더 적어보겠습니다.
양초 "그리기" 기능(오프라인 차트에서 열린 .hst에 양초 놓기). 마찬가지로 - 디버깅에 대한 경고를 설정합니다. 첫 번째 경고는 1초에 두 개의 포착된 틱에서 신호음을 울리고(배열 크기는 2이고 이론상 볼륨은 2와 같아야 함), 두 번째 경고는 포착된 눈금의 물음과 동일한 입찰가에서(경고와 유사합니다. 드라이브에서 : 그러나 어떤 이유로 그들은 동기화되지 않습니다.) , 양초의 볼륨. 이것은 이론적으로 모두 사실이며, 예를 들어 듀스(또는 0x00 00 00 00 00 00 00 40, double 2.0)와 같은 파일(경보에 따라)에 입력할 때 어떤 이유로 여전히 하나(0x00 00 00 00 00 00 F0 3F, BigEndian 형식의 두 배 1.0). 나는 일반적으로 드라이브에서 경고를 주석 처리합니다. 종종 경고음이 울립니다. 이 두 가지를 사용하여 작업합니다.
틱이 전혀 없는 경우 대시를 "그리기"하는 기능입니다. 모든 것은 다음 알고리즘에 따라 작동합니다.
Δtime=0: catch(복사) 틱.
Δtime=1: 이전에 포착한 눈금을 기준으로 촛대를 그린 다음 눈금을 포착합니다(누적기의 예비 영점 조정).
Δtime>1: 이전에 포착한 진드기에 양초를 그리고 Δtime-1의 양으로 Close[0] 라인을 따라 대시를 그리고 진드기를 포착합니다(누적기의 예비 영점화 사용). 모든 경우에 촛불이 이미 그려지면 드라이브를 재설정하므로 더 이상 배터리가 필요하지 않습니다. 이것은 Δtime>0일 때 발생합니다.
우리는 운전:
나는 입찰가가 매도호가와 같아야 하고 거래량이 1과 같아야 하는 순간을 화살표로 그렸습니다. 볼륨으로 바닥을 캡처하지 않았으며 여전히 볼 수 있는 것이 없습니다. 그러나 그것들은 모두 동등합니다. 즉, 0 또는 1 중 어느 것도 2로 올라가지 않습니다(경고가 울리지만). 초당 두 틱 - 모두 동일합니다. 마우스를 가져가면 volume=1이 표시되고 입찰가가 물음과 같으면 volume=0도 표시됩니다. 왜요? 어딘가에 오류가 있다는 것을 이해하지만 오류를 눈치채지 못하거나 잘못된 위치를 찾고 있을 가능성이 큽니다. 나는 코드를 첨부하고 있고, 내 부분에서 모든 것을 잘 설명하고, 모든 곳에서 들여쓰기를 따르고, 포함자를 제거하고, 더 빨리 컴파일하기 위해 사용되는 함수만 선택했습니다. 유일한 언급은 오프라인입니다. TimeLocal을 사용하면 원래 틱 컬렉터와 달리 작동하지 않습니다. 왜냐하면 if(tickTimeLocal==true) 에서 (나를 해치지 않았기 때문에) 헛소리에서 거기에 썼기 때문입니다. Taras의 조언에 따라 고문에게 이체를 시도했습니다. 그러면 오프라인 차트에 양초가 표시되지 않습니다(현재 시세의 선은 정상적으로 이동하지만).
당신의 신발.
여보세요
그런 질문이 있었습니다. 오늘이 월요일이라고 가정해 봅시다. 금요일 종가를 알아야 합니다 . 이렇게 써도 되나요
이 질문은 테스터에서 토요일과 일요일 막대를 보았기 때문에 나타납니다. 그러나 요즘은 거래가 없습니다. 위의 라인은 금요일 또는 일요일의 종가를 알려줄 것입니까?여보세요
그런 질문이 있었습니다. 오늘이 월요일이라고 가정해 봅시다. 금요일 종가를 알아야 합니다. 이렇게 써도 되나요
이 질문은 테스터에서 토요일과 일요일 막대를 보았기 때문에 나타납니다. 그러나 요즘은 거래가 없습니다. 위의 라인은 금요일 또는 일요일의 종가를 알려줄 것입니까?금요일 가격을 제공합니다! 서버가 금요일 24:00 이전에 닫히고 일요일 이후 0.00 이전에 시작하는 경우!
DailyPivotPoints 표시기를 사용하십시오!
아니, 난 정말 아무것도 이해하지 못한다. 분명히 이미 쓰고 있다.
경보가 2와 같으면 분에서 표시기를 제거하고 촛불 위로 마우스를 이동합니다... 볼륨=1.
나는 FileInsight(디버거와 같은)를 통해 hst의 RateInfo를 보았고 아마도 볼륨이 두 배가 아닌 int가 있을 수 있다고 생각합니다. 아니요, 두 배입니다...
좋은 저녁이에요.
제 질문에 답변해주셔서 감사합니다))
알려주세요 . 구매 주문 을 열면 OrderSend (Symbol(), OP_BUY , Lot, Ask ,3,0,0,"Buy",0,0,Green);
판매용인 경우 OrderSend (Symbol(), OP_SELL ,Lot, Ask ,3,0,0,"판매",0,0,Red);
파란색의 차이 아니면 여전히 빨간색을 변경해야 합니까 ??? 저것들. 여기서 OP_BUY는 입찰 가격입니다.
여기서 OP_SELL은 매도호가입니다.
모든 것이 정확하고 변경할 필요가 없다면 테스터에서 모든 것이 좋은 이유는 무엇이며 데모에서는 모든 것이 양호하며 REAL "오더 열기 129 오류" help plz.
좋은 저녁이에요.
제 질문에 답변해주셔서 감사합니다))
알려주세요. 구매 주문을 열면 OrderSend (Symbol(), OP_BUY , Lot, Ask ,3,0,0,"Buy",0,0,Green);
판매용인 경우 OrderSend (Symbol(), OP_SELL ,Lot, Ask ,3,0,0,"판매",0,0,Red);
파란색의 차이 아니면 여전히 빨간색을 변경해야 합니까 ??? 저것들. 여기서 OP_BUY는 입찰가입니다.
여기서 OP_SELL은 매도호가입니다.
모든 것이 정확하고 변경할 필요가 없다면 테스터에서 모든 것이 좋은 이유는 무엇이며 데모에서는 모든 것이 양호하며 REAL "오더 열기 129 오류" help plz.
좋은 저녁이에요.
제 질문에 답변해주셔서 감사합니다))
알려주세요. 구매 주문을 열면 OrderSend (Symbol(), OP_BUY , Lot, Ask ,3,0,0,"Buy",0,0,Green);
판매용인 경우 OrderSend (Symbol(), OP_SELL ,Lot, Ask ,3,0,0,"판매",0,0,Red);
...판매:
주문을 보내기 전에 견적을 업데이트하는 것이 좋습니다.
RefreshRates(); OrderSend (...);그리고 슬리피지 =3이 있다는 점에 유의하십시오. 4자리 따옴표의 경우 3포인트, 5자리 따옴표의 경우 0.3포인트로 계산됩니다. 따라서 고문이 5자리 따옴표로 작업할 경우 미끄러짐 = 30으로 설정합니다.아니, 난 정말 아무것도 이해하지 못한다. 분명히 이미 쓰고 있다.
경보가 2와 같으면 분에서 표시기를 제거하고 촛불 위로 마우스를 이동합니다... 볼륨=1.
나는 FileInsight(디버거와 같은)를 통해 hst에서 RateInfo를 보았고 아마도 볼륨이 두 배가 아닌 int가 있을 수 있다고 생각합니다. 아니요, 두 배입니다 ...
나는 당신의 코드를 보았다 .... 당신은 너무 혼란스러워)))
나는 우리가 메모리에 저장하기에 충분하기 때문에(또는 현재 막대가 HST로 작성되어야 하기 때문에 저장하지 않아도 됩니다. 그렇지 않으면 차트가 업데이트되지 않음) 현재 막대는 6개의 TOHLCV 숫자이며 틱이 도착하면 필요에 따라 업데이트하고 지정된 조건( TimeCurrent() -O>1) 절단 막대에 따라 업데이트합니다.
그런 식으로 코드를 다시 작업해 보세요. 8배 줄어들 것입니다. 보장합니다(테스트됨:)