절차적 스타일에서 다시 배우나요? 흠, 절차적 스타일로 잘 작성된 코드는 클래스에 래핑될 수 있습니다. 프로젝트를 확장해야 하는 경우 일반적으로 문제가 없습니다.
나는 많은 것을 빨리 할 수 있다
나는 이것을 이론 연구에 바치기로 결정했습니다. 오히려 MQL을 최근 몇 년 동안 등장한 것으로 가져오기 위해 여기에서도 많은 사람들이 터미널의 기능을 인식하지 못합니다.
그리고 당신이 자료를 연구한다면, 당신은 그것을 올바르게 연구해야 합니다. IMHO, 그리고 MQL이 C++ 또는 여전히 C#에 더 가까운 것을 이해해야 합니다. 수식어를 사용하지 않거나 오히려 스튜디오가 의심스러운 것으로 표시하고 최대값이 정확함)))
const - 변수에 대한 할당을 금지해야 하는 경우(초기화 중 한 번 제외). 변수가 cont로 선언된 경우 참조에 의해 함수에 전달할 때 함수 인수도 const여야 하지만 컴파일러는 강제로 변수에 대해 생각할 필요가 없습니다. 변수가 할당되지 않은 경우 const로 표시할 수도 있습니다. 더 빠르게 작동하며 이는 함수 인수에 적용됩니다. 그러나 언제든지 수정이 필요할 수 있습니다 ...
static - 이것이 클래스의 변수인 경우 이것은 드문 경우이며 가장 드문 경우입니다. 클래스 메서드라면 이 메서드의 인자와 정적 클래스 변수 만 메서드 내에서 처리한다면 이것도 드문 경우다. 클래스).
추신: 인터넷에서 더욱 그렇습니다. 일반적으로 프로그래밍에 대한 토론에서 벌어지는 일에 대한 공포 - 지난 달 Habré에 const에 대한 기사가 있었습니다. 요점은 - 예, 이 const는 필요하지 않습니다. 어셈블러 코드는 const가 없는 것과 다르지 않습니다. 컴파일러는 모든 것을 제거합니다(((
다음은 예입니다.
struct SSettingsForOrder
{
int mPeriod;
double mTakeProfit;
double mStopLoss;
};
class CStrategy
{
SSettingsForOrder mSettings;
bool mDirty;
public :
CStrategy() : mDirty( true ){}
CStrategy( SSettingsForOrder& set ) : mSettings( set ), mDirty( true ){}
virtualvoid NextStepStrategy();
bool IsDirty() const
{
return mDirty;
}
int GetPeriod() const
{
return mSettings.mPeriod;
}
void SetPeriod( int period )
{
if ( mSettings.mPeriod != period )
{
mSettings.mPeriod = period;
mDirty = true ;
}
}
double GetTakeProfit() const
{
return mSettings.mTakeProfit;
}
void SetTakeProfit( double takeProfit )
{
mSettings.mTakeProfit = takeProfit;
mDirty = true ;
}
double GetStopLoss() const
{
return mSettings.mStopLoss;
}
void SetStopLoss( double stopLoss )
{
mSettings.mStopLoss = stopLoss;
mDirty = true ;
}
void Load( int fileHandle )
{
FileReadStruct ( fileHandle, mSettings );
mDirty = false ;
}
void Save( int fileHandle )
{
FileWriteStruct ( fileHandle, mSettings );
mDirty = false ;
}
};
class CStrategy_XXX : public CStrategy
{
public :
CStrategy_XXX(){}
CStrategy_XXX( SSettingsForOrder& set ) : CStrategy( set ){}
virtualvoid NextStepStrategy();
};
class CStrategy_YYY : public CStrategy
{
public :
CStrategy_YYY(){}
CStrategy_YYY( SSettingsForOrder& set ) : CStrategy( set ){}
virtualvoid NextStepStrategy();
};
class CStrategy_ZZZ : public CStrategy
{
public :
CStrategy_ZZZ(){}
CStrategy_ZZZ( SSettingsForOrder& set ) : CStrategy( set ){}
virtualvoid NextStepStrategy();
};
CStrategy* Strategies[ 3 ];
voidOnInit ()
{
Strategies[ 0 ] = new CStrategy_XXX();
Strategies[ 1 ] = new CStrategy_YYY();
Strategies[ 2 ] = new CStrategy_ZZZ();
int fileHandle = FileOpen ( ... );
for ( int i = 0 ; i < 3 ; i++ )
{
Strategies[i].Load( fileHandle );
}
FileClose ( fileHandle );
}
void TestAndSave()
{
bool saveRequired = false ;
for ( int i = 0 ; i < 3 ; i++ )
{
if ( Strategies[i].IsDirty() )
{
saveRequired = true ;
break ;
}
}
if ( saveRequired )
{
int fileHandle = FileOpen ( ... );
for ( int i = 0 ; i < 3 ; i++ )
{
Strategies[i].Save( fileHandle );
}
FileClose ( fileHandle );
}
}
voidOnDeinit ()
{
TestAndSave();
for ( int i = 0 ; i < 3 ; i++ )
{
delete Strategies[i];
}
}
표시된 대로 인터페이스를 기본 클래스 CStrategy를 상속하는 추상화로 적용 - 내 CStrategy에는 공용 메서드가 없으며 모든 공용은 인터페이스로 설명됩니다(3개 = 전략 자체, 전략 완료 및 이제 전략 상태에 대한 기록을 추가했습니다). 인터페이스의 역할은... 음, const 수정자의 역할과 거의 같습니다. 메서드를 설명하지 않았거나 상속으로 닫으려고 하면 초기 단계에서 경고가 표시됩니다. 지금까지는 더 많은 편의를 경험하고 있습니다. 문제보다.
일반적으로 100 %의 확률로 필요하지 않다는 것을 확인합니다 ... 그러나 CStrategy 클래스에 공개 섹션이 포함되지 않는 것이 편리합니다
귀하의 코드는 좋아 보입니다. 점심 식사 후에 집에서 재현해 보겠습니다. 제 코드와 비교해 보겠습니다.
Vladimir Simakov : mql 자체는 C++를 기반으로 하지만 제작자의 노력으로 샤프에서 좋은 점은 추가하지 않고 나쁜 점을 많이 가져왔습니다. Sharpe와 유사한 표준 라이브러리 가 표시됩니다. std처럼 보이면 더 논리적으로 보일 것입니다. 임호.
아마도 MQL 포럼에서 "이것은 C ++가 아닙니다. 이것은 MQL입니다 ..."라는 문구를 시작한 사람일 것입니다. 이제 이 컨텍스트에서 귀하와 같은 많은 질문에 답합니다.
일반적으로 언어는 상당히 민주적이며 MQL로 작성하는 것이 편리하지 않습니다. "2번의 클릭으로" .dll C++로 이동하고 연초부터 .dll C#으로 이동할 수 있습니다. 메모리가 제공되는 경우 첫 번째 중 하나 개발자 Renat의 dll 관련 기사 - t .e. 이 가능성은 초기에 제품의 개념이 제안됨에 따라 IMHO
추신: 위의 내용에 대해 어떤 이유에서인지 – 나는 예술가입니다 – 나는 그렇게 봅니다! )))
«Проводник тратит 700 мс на то, чтобы открыть контекстное меню панели задач. 75% этого времени он выполняет 114 801 операцию считывания из одного файла, средний объём считываемых данных 68 байт. Мне стоит написать пост об этом, или достаточно саркастичного твита?» За компьютером я работаю быстро, и поэтому меня раздражает, когда приходится...
네 저도 비슷한 상황입니다. 배우는 것은 어렵지 않으며, 다시 배우고 오래된 습관을 깨는 것이 더 어렵습니다. 나는 여전히 절차적 프로그래밍의 많은 나쁜 습관을 버릴 수 없습니다.
절차적 스타일에서 다시 배우나요? 흠, 절차적 스타일로 잘 작성된 코드는 클래스에 래핑될 수 있습니다 . 프로젝트 를 확장해야 하는 경우 일반적으로 문제가 없습니다.
지금은 상수와 정적에 대해 잊어도 됩니다. 인터페이스에도.
그러나 모든 것이 준비되면 어떤 것은 정적인 것으로, 어떤 것은 상수로 보고 표시하십시오. 그리고 인터페이스에서는 일반적으로 망치질할 수 있습니다.
나는 많은 것을 빨리 할 수 있다
나는 이것을 이론 연구에 바치기로 결정했습니다. 오히려 MQL을 최근 몇 년 동안 등장한 것으로 가져오기 위해 여기에서도 많은 사람들이 터미널의 기능을 인식하지 못합니다.
그리고 당신이 자료를 연구한다면, 당신은 그것을 올바르게 연구해야 합니다. IMHO, 그리고 MQL이 C++ 또는 여전히 C#에 더 가까운 것을 이해해야 합니다. 수식어를 사용하지 않거나 오히려 스튜디오가 의심스러운 것으로 표시하고 최대값이 정확함)))
지금은 상수와 정적에 대해 잊어도 됩니다. 인터페이스에도.
그러나 모든 것이 준비되면 어떤 것은 정적인 것으로, 어떤 것은 상수로 보고 표시하십시오. 그리고 인터페이스에서는 일반적으로 망치질할 수 있습니다.
가장 중요한 것은 상수와 정적이 유지되어야 한다는 것입니다. 인터페이스에 대해 동의합니다.
절차적 스타일에서 다시 배우나요? 흠, 절차적 스타일로 잘 작성된 코드는 클래스에 래핑될 수 있습니다. 프로젝트를 확장해야 하는 경우 일반적으로 문제가 없습니다.
나는 많은 것을 빨리 할 수 있다
나는 이것을 이론 연구에 바치기로 결정했습니다. 오히려 MQL을 최근 몇 년 동안 등장한 것으로 가져오기 위해 여기에서도 많은 사람들이 터미널의 기능을 인식하지 못합니다.
그리고 당신이 자료를 연구한다면, 당신은 그것을 올바르게 연구해야 합니다. IMHO, 그리고 MQL이 C++ 또는 여전히 C#에 더 가까운 것을 이해해야 합니다. 수식어를 사용하지 않거나 오히려 스튜디오가 의심스러운 것으로 표시하고 최대값이 정확함)))
const - 변수에 대한 할당을 금지해야 하는 경우(초기화 중 한 번 제외). 변수가 cont로 선언된 경우 참조에 의해 함수에 전달할 때 함수 인수도 const여야 하지만 컴파일러는 강제로 변수에 대해 생각할 필요가 없습니다. 변수가 할당되지 않은 경우 const로 표시할 수도 있습니다. 더 빠르게 작동하며 이는 함수 인수에 적용됩니다. 그러나 언제든지 수정이 필요할 수 있습니다 ...
static - 이것이 클래스의 변수인 경우 이것은 드문 경우이며 가장 드문 경우입니다. 클래스 메서드라면 이 메서드의 인자와 정적 클래스 변수 만 메서드 내에서 처리한다면 이것도 드문 경우다. 클래스).
예를 들면 일반적으로 수정자를 사용하는 데 문제가 있습니다.
추신: 인터넷에서 더욱 그렇습니다. 일반적으로 프로그래밍에 대한 토론에서 벌어지는 일에 대한 공포 - 지난 달 Habré에 const에 대한 기사가 있었습니다. 요점은 - 예, 이 const는 필요하지 않습니다. 어셈블러 코드는 const가 없는 것과 다르지 않습니다. 컴파일러는 모든 것을 제거합니다(((
다음은 예입니다.
왜 인터페이스가 필요한지 코드에서 명확하지 않아 생략했습니다.
물론 나는 당신의 작업을 완전히 알지 못하지만 99.99 %의 확률로 필요하지 않습니다.
절차적 스타일에서 다시 배우나요? 흠, 절차적 스타일로 잘 작성된 코드는 클래스에 래핑될 수 있습니다. 프로젝트를 확장해야 하는 경우 일반적으로 문제가 없습니다.
나는 많은 것을 빨리 할 수 있다
나는 이것을 이론 연구에 바치기로 결정했습니다. 오히려 MQL을 최근 몇 년 동안 등장한 것으로 가져오기 위해 여기에서도 많은 사람들이 터미널의 기능을 인식하지 못합니다.
그리고 당신이 자료를 연구한다면, 당신은 그것을 올바르게 연구해야 합니다. IMHO, 그리고 MQL이 C++ 또는 여전히 C#에 더 가까운 것을 이해해야 합니다. 수식어를 사용하지 않거나 오히려 스튜디오가 의심스러운 것으로 표시하고 최대값이 정확함)))
다음은 예입니다.
왜 인터페이스가 필요한지 코드에서 명확하지 않아 폐기했습니다.
물론 나는 당신의 작업을 완전히 알지 못하지만 99.99 %의 확률로 필요하지 않습니다.
제 생각에는 인터페이스를 버리고 귀찮게하지 마십시오))))
OOP 디자인 패턴 "Strategy" 를 기본으로 삼았습니다.
표시된 대로 인터페이스를 기본 클래스 CStrategy를 상속하는 추상화로 적용 - 내 CStrategy에는 공용 메서드가 없으며 모든 공용은 인터페이스로 설명됩니다(3개 = 전략 자체, 전략 완료 및 이제 전략 상태에 대한 기록을 추가했습니다). 인터페이스의 역할은... 음, const 수정자의 역할과 거의 같습니다. 메서드를 설명하지 않았거나 상속으로 닫으려고 하면 초기 단계에서 경고가 표시됩니다. 지금까지는 더 많은 편의를 경험하고 있습니다. 문제보다.
일반적으로 100 %의 확률로 필요하지 않다는 것을 확인합니다 ... 그러나 CStrategy 클래스에 공개 섹션이 포함되지 않는 것이 편리합니다
귀하의 코드는 좋아 보입니다. 점심 식사 후에 집에서 재현해 보겠습니다. 제 코드와 비교해 보겠습니다.
고맙습니다!
mql 자체는 C++를 기반으로 하지만 제작자의 노력으로 샤프에서 좋은 점은 추가하지 않고 나쁜 점을 많이 가져왔습니다. Sharpe와 유사한 표준 라이브러리 가 표시됩니다. std처럼 보이면 더 논리적으로 보일 것입니다. 임호.
아마도 MQL 포럼에서 "이것은 C ++가 아닙니다. 이것은 MQL입니다 ..."라는 문구를 시작한 사람일 것입니다. 이제 이 컨텍스트에서 귀하와 같은 많은 질문에 답합니다.
일반적으로 언어는 상당히 민주적이며 MQL로 작성하는 것이 편리하지 않습니다. "2번의 클릭으로" .dll C++로 이동하고 연초부터 .dll C#으로 이동할 수 있습니다. 메모리가 제공되는 경우 첫 번째 중 하나 개발자 Renat의 dll 관련 기사 - t .e. 이 가능성은 초기에 제품의 개념이 제안됨에 따라 IMHO
추신: 위의 내용에 대해 어떤 이유에서인지 – 나는 예술가입니다 – 나는 그렇게 봅니다! )))
추신: 위의 내용에 대해 어떤 이유에서인지 – 나는 예술가입니다 – 나는 그렇게 봅니다! )))
이것은 개발자의 답변에서 매우 자주 기억되며 좋거나 나쁘며 알려져 있지 않습니다.
개발자가 정보를 제공하고 모든 질문에 대해 한 번만 닫았다면 - 기능을 추가하거나 변경할 수 없는 이유
이것은 개발자의 답변에서 매우 자주 기억되며 좋거나 나쁘며 알려져 있지 않습니다.
개발자가 정보를 제공하고 모든 질문에 대해 한 번만 닫았다면 - 기능을 추가하거나 변경할 수 없는 이유
글쎄, 이것은 IT 독점 기업의 지원과 함께 사용자 커뮤니케이션의 확립 된 기업 스타일이며, 인터넷은 사용자가 명백한 Microsoft 버그를 발견하고 Microsoft에 연락 한 후 응답을받는 경우로 가득합니다 ... 일반적으로 침묵)))
추신: 최근 읽기에서 Habr " Windows가 메뉴를 열기 위해 파일 하나를 수십만 번 읽는 이유는 무엇입니까? "