예 ... 나는 당신의 코드를 너무 부주의하게 보았기 때문에 전혀 보지 않았다고 말하는 것이 더 낫습니다. 그러나 이것은 바닥입니다. 그런 다음 나는 거의 부끄러운 그런 말도 안되는 소리를 멈췄습니다. 어떤 이유에서인지 ArrayMaximum() 을 구조체 배열이나 이 배열의 별도 필드에 적용할 수 있다는 미친 생각이 갑자기 떠올랐습니다.
나는 고백합니다. 나는 다른 사람에게 그렇게 생각하도록 조언하지 않습니다. 작동하지 않습니다 ... :)
예 ... 나는 당신의 코드를 너무 부주의하게 보았기 때문에 전혀 보지 않았다고 말하는 것이 더 낫습니다. 그러나 이것은 바닥입니다. 그런 다음 나는 거의 부끄러운 그런 말도 안되는 소리를 멈췄습니다. 어떤 이유에서인지 ArrayMaximum()을 구조체 배열이나 이 배열의 별도 필드에 적용할 수 있다는 미친 생각이 갑자기 떠올랐습니다.
나는 고백합니다. 나는 다른 사람에게 그렇게 생각하도록 조언하지 않습니다. 작동하지 않습니다 ... :)
그럼... 그리고 나는? 같은 방식으로 감사의 인사를 전한 귀하의 코드를 간과했습니다. 그들은 그것이 실제로 더 짧다고 말합니다 ...
나는 완전히 혼란스럽다.
더블 blevel= OrderStopLoss ()< 입찰 - 포인트 *TS; 나를 위해 작동합니다. SL은 이익으로만 가격을 따릅니다.
이중 slevel= OrderStopLoss ()> 묻기 + 포인트 *TS; 하지만 이것을 다른 것에 추가하는 방법을 모르겠습니다
나는 그들을 bool처럼 가지고 있지 않습니다.
bool은 아니지만 암시적 변환이라고 합니다.
뭐하는거야? 트롤 그물?
bool은 아니지만 암시적 변환이라고 합니다.
뭐하는거야? 트롤 그물?
예, 트롤을 만들려고 했습니다. 원래 스크립트는 주문에 대한 이익이 도달하면 닫히는 것이었습니다.
예, 트롤을 만들려고 했습니다. 원래 스크립트는 주문에 대한 이익이 도달하면 닫히는 것이었습니다.
논리:
사이클에서 선택된 현재 주문의 이익이 지정된 것보다 크면 그 손절매가 계산된 후행 손절매 수준보다 작거나(매도의 경우)/큰(매도의 경우) 스탑을 새로운 스탑으로 이동 값.
이것은 매우 간략합니다.
내가 제안한 거 아니야?
예 ... 나는 당신의 코드를 너무 부주의하게 보았기 때문에 전혀 보지 않았다고 말하는 것이 더 낫습니다. 그러나 이것은 바닥입니다. 그런 다음 나는 거의 부끄러운 그런 말도 안되는 소리를 멈췄습니다. 어떤 이유에서인지 ArrayMaximum() 을 구조체 배열이나 이 배열의 별도 필드에 적용할 수 있다는 미친 생각이 갑자기 떠올랐습니다.
나는 고백합니다. 나는 다른 사람에게 그렇게 생각하도록 조언하지 않습니다. 작동하지 않습니다 ... :)
예 ... 나는 당신의 코드를 너무 부주의하게 보았기 때문에 전혀 보지 않았다고 말하는 것이 더 낫습니다. 그러나 이것은 바닥입니다. 그런 다음 나는 거의 부끄러운 그런 말도 안되는 소리를 멈췄습니다. 어떤 이유에서인지 ArrayMaximum()을 구조체 배열이나 이 배열의 별도 필드에 적용할 수 있다는 미친 생각이 갑자기 떠올랐습니다.
나는 고백합니다. 나는 다른 사람에게 그렇게 생각하도록 조언하지 않습니다. 작동하지 않습니다 ... :)
그럼... 그리고 나는? 같은 방식으로 감사의 인사를 전한 귀하의 코드를 간과했습니다. 그들은 그것이 실제로 더 짧다고 말합니다 ...
요컨대 - 둘 다 농담할만한 가치가 있습니다 ...
스크립트가 아닙니다 - 고문. 당신은 혼란스러운 프로그램입니다. 스크립트는 차트에 로드된 후 한 번 실행된 후 삭제됩니다. 그가 집착하지 않는다면. 누군가가 포지션을 닫기 위한 루프 스크립트를 만들 가능성은 거의 없습니다.
저자에 따르면:
다음은 약간 수정된 표준 MT4 스크립트입니다. close.mq4파일을 MetaTrader\experts\Scripts 폴더에 넣고,
그럼... 그리고 나는? 같은 방식으로 감사의 인사를 전한 귀하의 코드를 간과했습니다. 그들은 그것이 실제로 더 짧다고 말합니다 ...
요컨대 - 둘 다 농담할만한 가치가 있습니다 ...
동의하지 않습니다. 이 코드
CopyOpen ( _Symbol , PERIOD_CURRENT , 1 , 15 , openCandle);
CopyClose ( _Symbol , PERIOD_CURRENT , 1 , 15 , closeCandle);
double maxCandle = fmax (openCandle[ ArrayMaximum (openCandle)], closeCandle[ ArrayMaximum (closeCandle)]);
double minCandle = fmin (openCandle[ ArrayMinimum (openCandle)], closeCandle[ ArrayMinimum (closeCandle)]);
테스트하고 작동합니다. 다음은 간단한 사용자 지정 이중 배열이며 CopyRates()는 구조 배열 을 채우므로 배열 함수를 사용하여 최대값과 최소값을 선택할 수 없습니다.
저자에 따르면:
다음은 약간 수정된 표준 MT4 스크립트입니다. close.mq4파일을 MetaTrader\experts\Scripts 폴더에 넣고,
이것은 그의 스크립트가 한 번만 작동한다는 것을 의미합니다. 즉, 차트에 올려 놓고 스크립트가 작동하고( 닫힌 위치 ) 언로드됩니다.
그리고 당신은 스크립트가 아니라 고문이 필요합니다.
동의하지 않습니다. 이 코드
CopyOpen ( _Symbol , PERIOD_CURRENT , 1 , 15 , openCandle);
CopyClose ( _Symbol , PERIOD_CURRENT , 1 , 15 , closeCandle);
double maxCandle = fmax (openCandle[ ArrayMaximum (openCandle)], closeCandle[ ArrayMaximum (closeCandle)]);
double minCandle = fmin (openCandle[ ArrayMinimum (openCandle)], closeCandle[ ArrayMinimum (closeCandle)]);
테스트하고 작동합니다. 다음은 간단한 사용자 지정 이중 배열이며 CopyRates()는 구조 배열을 채우므로 배열 함수를 사용하여 최대값과 최소값을 선택할 수 없습니다.
글쎄, 나는 당신에게 말하고 있습니다 - 나는 또한 당신의 코드를 매우 주의 깊게 보았습니다. 그래서 - 나에 대한 농담
추신. 사실, 내 코드는 높음 / 낮음 / 가장 높음 / 가장 낮은 4 가지 값을 반환하고 당신의 것은 높음과 낮음뿐이며 광산은 데이터 복사 성공 (전부는 아니지만)을 확인하지만 당신의 것은 ...
이것은 내 코드가 원하는 데이터의 완전한 복사본을 확인하는 방법입니다.
//| sFindRangeByCandlesBody.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Begin= 1 ; // Бар начала диапазона поиска
input int RangeBars= 20 ; // Диапазон поиска
//---
int bars= Bars ( Symbol (), PERIOD_CURRENT );
int begin=(Begin< 0 ? 0 :Begin>bars- 3 ?bars- 3 :Begin);
int rangeBars=(RangeBars< 2 ? 2 :
RangeBars>bars-begin?bars-begin:
RangeBars); // Диапазон поиска
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart ()
{
//---
MqlRates array[];
double high= 0 , low= 0 ;
int highest=- 1 , lowest=- 1 ;
if ( CopyRates ( Symbol (), PERIOD_CURRENT ,begin,rangeBars,array)==rangeBars) {
ArraySetAsSeries (array, true );
high=GetHighestValue(begin,array,highest);
low=GetLowestValue(begin,array,lowest);
}
Print ( "High=" , DoubleToString (high, Digits ()), ", Highest=" ,highest, ", Low=" , DoubleToString (low, Digits ()), ", Lowest=" ,lowest);
}
//+------------------------------------------------------------------+
double GetHighestValue( int bar_begin, MqlRates &array[], int &bar_highest){
int sz= ArraySize (array);
if (sz== 0 ) return (- 1 );
double high= DBL_MIN ;
bar_highest=- 1 ;
for ( int i= 0 ; i<sz; i++) {
double value= fmax (array[i].open,array[i].close);
if (value>high) {
high=value;
bar_highest=bar_begin+i;
}
}
return (high);
}
//+------------------------------------------------------------------+
double GetLowestValue( int bar_begin, MqlRates &array[], int &bar_lowest){
int sz= ArraySize (array);
if (sz== 0 ) return (- 1 );
double low= DBL_MAX ;
bar_lowest=- 1 ;
for ( int i= 0 ; i<sz; i++) {
double value= fmin (array[i].open,array[i].close);
if (value<low) {
low=value;
bar_lowest=bar_begin+i;
}
}
return (low);
}
//+------------------------------------------------------------------+