Aliaksandr Hryshyn : Acaba soldakiyle tam olarak aynı tasarımı kullanan işlevler (sınıflar, yapılar ...) için yorum kullanan birçok insan var mı?
Çok sık ve kalın kullanırım (Doğru, “kareler” şeklinde çizmiyorum, “aynen böyle” yazıyorum.
İşte mevcut ticaret geçmişi arayüz dosyam. Ve bu maksimum yorum değil.
// СTradeHistoryI переносимый интерфейс торговой истории // История состоит из компонент-наследников интерфейса CHistoryPosComponentI// // Реально для МТ4 имплементацией интерфейса является объект CMT4TradeHistory, для МТ5 - объект CMT5TradeHistory// CMT4TradeHistory представляет из себя массив объектов CMT4HistoryOrderInfo, наследников интерфейса CHistoryPosComponentI.// Фактически это массив исторических МТ4-ордеров.// CMT5TradeHistory представляет из себя массив объектов CMT5HistoryPositionInfoCore, наследников интерфейса CHistoryPosComponentI.// Объект CMT5HistoryPositionInfoCore не имеет прямого аналога в МТ5-терминах, это два массива ордеров и сделок, а также структура данных,// имеющуая идентификатор позиции (m_lPosID или POSITION_IDENTIFIER), тикет магик, вид позиции, и так далее, по аналогии с МТ4-ордером,// фактически, массивы ордеров и сделок - это аналоги ордеров и сделок обычной неттинговой МТ5-позиции, а структура данных - относится// к хеджевой позиции, и имеет аналог МТ4-ордера. //// Реально при запросе у позиции компоненты CHistoryPosComponentI в МТ4 мы получаем указатель на ордер (класс CMT4HistoryOrderInfo),// а в МТ5 - на ядро позиции (класс CMT5HistoryPositionInfoCore) #include <MyLib\DebugOrRelease\DebugSupport.mqh>
#include <MyLib\Common\MyObject.mqh>
#include <MyLib\Common\CurSymEnum.mq5>
#include <MyLib\Common\TrendEnums.mqh>
#include <MyLib\Trade\TradePosComponentI.mqh>
#include <MyLib\Trade\SortTradePosComponentT.mqh>
class CTSContainerI;
class CROTradeHistoryI: public CMyObject
{
public :
void CROTradeHistoryI() { SetMyObjectType(MOT_TRADE_READONLY_HISTORY_I); };
virtualvoid ~CROTradeHistoryI() {};
virtualuint GetTotalComponents() const = 0 ; // Получение общего числа компонентvirtual CHistoryPosComponentI* GetComponent( uint uiComponentIdx) const = 0 ;
virtual CHistoryPosComponentI* GetOldestOpenComponent() const = 0 ; // Может вернуть NULL !!!virtual CHistoryPosComponentI* GetNewestCloseComponent() const = 0 ; // Может вернуть NULL !!!// Функция ищет внутри истории компоненту с указанным тикетом. // В случае, если ее нет - возвращается false.// Если компонента найдена - возвращается true, и uiComponentIdx устанавливается на индекс компоненты внутри позиции.virtualbool FindComponentByTicket( long lTicket, uint &uiComponentIdx) const = 0 ;
// Функция анализирует историю и возвращает символ, по которому совершены сделки.// Если все выбранные сделки имеют один и тот же символ - возвращается этот символ.// Если сделки имеют разные символы или сделок нет - возвращается CS_CURRENT.// Если хотя бы один символ CS_UNKNOWN - возвращается CS_UNKNOWNvirtual ECurrencySymbol GetSymbols() const = 0 ;
};
class CTradeHistoryI: public CROTradeHistoryI
{
public :
void CTradeHistoryI() { SetMyObjectType(MOT_TRADE_HISTORY_I); };
virtualvoid ~CTradeHistoryI() {};
// Выбор существующей истории. // Указывается магик и символ, по которому выбираются исторические ордера, а также промежуток времени, в котором необходимо искать их.// Если ulMagic = 0 - выбираются все позиции по всем магикам.// Если ECurrencySymbol = CS_UNKNOWN - выбираются все позиции по всем символам// Если ECurrencySymbol = CS_CURRENT - запрашивается функция Symbol(), и выбираются все позиции по этому символу// ptcTSContainer - указатель на контейнер таймсерий, по которому можно определять просад для каждой позиции. Может быть NULL, в этом случае просад устанавливается нулевым.// Возвращает число компонент позиции внутри истории (может быть нулевым если ничего не найдено) или WRONG_VALUE в случае ошибок// NOTE !!! // При выборе - отложенные ордера не учитываются.virtualint Select( ulong ulMagic = 0 ,ECurrencySymbol csSymbol = CS_CURRENT, datetime dtFrom = MIN_DATETIME, datetime dtTill = NEVER_EXPIRES,CTSContainerI* ptcTSContainer = NULL ) = 0 ;
// Расширенный интерфейсvirtualvoid Sort(ESortTPCMode stmMode = STM_BY_OPEN_TIME_A) = 0 ;
};
Genel olarak, sınıf ne kadar spesifik olursa, o kadar fazla yoruma sahip olmalıdır.
Eh, Peter Konov gibi bir mega hafızanız olması dışında - burada yorum yapmadan yapabilirsiniz.
He-he-o... Ve "ağaçlardan ormanı göremediğinizde" gözlerimde dalgalanmalar oluyor.
Sadece yukarıdaki parçada - her şey doğru görünüyor, ancak tek bir yorum olmadan ve bu "çevre" gibi, boşluklar olmadan, kahretsin, bunu anlamak ne kadar zor ...
Biçimlendirmeye gelince. Birkaç stil girmeniz gerekiyor. Biri MQ'dan olan. Bunu öneririm:
Şu anki tarzda en sevmediğim şey kaşlı kaşlı ayraçlar. Neden onları taşıdılar, anlamıyorum. Örneğinizde olduğu gibi her zaman tüm parantezleri Tab ile hizalarım.
Çok sık ve kalın kullanırım (Doğru, “kareler” şeklinde çizmiyorum, “aynen böyle” yazıyorum.
İşte mevcut ticaret geçmişi arayüz dosyam. Ve bu maksimum yorum değil.
Genel olarak, sınıf ne kadar spesifik olursa, o kadar fazla yoruma sahip olmalıdır.
Eh, Peter Konov gibi bir mega hafızanız olması dışında - burada yorum yapmadan yapabilirsiniz.
Benzer bir tane var, sadece yorum daha küçük :).
//Использование моделиclass Catboost
{
private :
staticint lng_id; //public :
//Правило сплита: предиктор больше указанного значения(true/false)struct sSplit_rule
{
uint predictor_id; //Индекс предиктораdouble border; //С чем сравнивается он
};
//Набор правил, при соответствии которым получим результат листа leafstruct sLeaf
{
double leaf; //Значение листа
sSplit_rule split_rules[]; //Набор правил
};
uint TreeDepth[]; //Глубины деревьев, глубина означает колчиство правил. В каждом правиле используется один бинарный признак.uint TreeSplits[]; //Какие бинарные признаки использует каждое деревоuint BorderCounts[]; //На сколько бинарных признаков будет разбит каждый предикторfloat Borders[]; //Пороговые значения для всех предикторов, они определяют значения бинарных признаков(0/1). Если предиктор выше значения в массиве, будет 1, иначе 0.double LeafValues[]; //Результаты деревьев для каждого сочетания используемых бинарных признаковuint features_pos[]; //Откуда взялась бинарная фича.Указывается индекс.
~Catboost( void );
Catboost();
//Создание экземпляра класса (инициализация конкретной модели)
Catboost( uint &TreeDepth_[], uint &TreeSplits_[], uint &BorderCounts_[], float &Borders_[], double &LeafValues_[]);
//Приеменение модели//features -предикторыdouble ApplyCatboostModel( constdouble &features[]);
//Приеменение модели.Модель передаётся через массивыstaticdouble ApplyCatboostModel( constdouble &features[], uint &TreeDepth_[], uint &TreeSplits_[], uint &BorderCounts_[], float &Borders_[], double &LeafValues_[]);
//Применение модели с сохранением данных о влиянии предикторов на результатdouble ApplyCatboostModel_data( constdouble &features[], datetime time);
long data_counter; //Счётчик выполнения функции ApplyCatboostModel_data
CSV *csv_tree_rules; //Сюда сохраняются все сработанные правила, результаты деревьев
CSV *csv_model_rules; //Сюда сохраняются правила, которые сработали во всей модели.перекрывающиеся правила будут удаляться//Перобразование модели CatBoost с исходников C++ в MQLstaticbool CatBoost_model_to_MQL( string input_file_cpp, string output_file_mql);
//Чтение модели с файла исходника C++bool Model_read_from_file( string input_file_cpp);
//Получение полного списка правил для каждого листа leaf_rules_outvoid Get_leaf_rules(sLeaf &leaf_rules_out[]);
};
int Catboost::lng_id=cLng::Set_users_errors_messages( "Catboost" ,Catboost_lngs,Catboost_strings);
Yapmam gerektiği gibi, listenin her yerine "bulaştıran" yorumlardan hoşlanmıyorum.
Strateji test cihazında optimize ediyorum, tamamlandıktan sonra, sonuçları analiz etmek veya sadece veri toplamak için OnTesterDeinit() yürütülüyor. Yani şu anda, strateji test cihazı sanki her şey bitmiş gibi bir duruma giriyor, ancak bu zamanda, verilerin son işlenmesi arka planda uzun zaman alabilir. Gösterge tablosunun bulunduğu pencere kapatıldığında, Expert Advisor'ın işi zorla sonlandırılır.
OnTesterDeinit() bir dosyaya yazdığında, mevcut optimizasyonun bittiğini düşünerek, hızlı bir şekilde hesaplanan minimum parametre aralıkları ile bir sonrakini başlatalım. Sonuç olarak, önceki lansmanımız tamamlanmadı ve yenisi aynı aşamada, örneğimizde bu bir dosya yazma erişim hatasına veya dosyada yalnızca bir karmaya yol açıyor, ancak bu görsel olarak izlenemez, yalnızca load manager veya file... Test cihazında bu işlemin henüz tamamlanmadığını görebilmek istiyorum.
Strateji test cihazında optimize ediyorum, tamamlandıktan sonra, sonuçları analiz etmek veya sadece veri toplamak için OnTesterDeinit() yürütülüyor. Yani şu anda, strateji test cihazı sanki her şey bitmiş gibi bir duruma giriyor, ancak bu zamanda, verilerin son işlenmesi arka planda uzun zaman alabilir. Gösterge tablosunun bulunduğu pencere kapatıldığında, Expert Advisor'ın işi zorla sonlandırılır.
OnTesterDeinit() bir dosyaya yazdığında, mevcut optimizasyonun bittiğini düşünerek, hızlı bir şekilde hesaplanan minimum parametre aralıkları ile bir sonrakini başlatalım. Sonuç olarak, önceki lansmanımız tamamlanmadı ve yenisi aynı aşamada, örneğimizde bu bir dosya yazma erişim hatasına veya dosyada yalnızca bir karmaya yol açıyor, ancak bu görsel olarak izlenemez, yalnızca load manager veya file... Test cihazında bu işlemin henüz tamamlanmadığını görebilmek istiyorum.
Optimize ederken, yeni bir grafik penceresi açılır - belki bir şekilde işin sonunu grafik kimliğine göre öğrenebilirsiniz? Grafiği kapatmak mümkün görünüyor, ardından OnTesterDeinit()'te hesaplamalar tamamlandıktan sonra pencereyi kapatabilirsiniz ve sonunda, sadece o sırada açık olan grafiğin varlığını izlememiz gerekiyor. optimizasyon başlangıcı, nasıl ortadan kalktı - test cihazı yeni bir optimizasyon için hazır.
Optimize ederken, yeni bir grafik penceresi açılır - belki bir şekilde işin sonunu grafik kimliğine göre öğrenebilirsiniz? Grafiği kapatmak mümkün görünüyor, ardından OnTesterDeinit()'te hesaplamalar tamamlandıktan sonra pencereyi kapatabilirsiniz ve sonunda, sadece o sırada açık olan grafiğin varlığını izlememiz gerekiyor. optimizasyon başlangıcı, nasıl ortadan kalktı - test cihazı yeni bir optimizasyon için hazır.
Yani değiştirilmesi gereken kod bu ve eğer böyle bir olasılık yoksa?
Yani değiştirilmesi gereken kod bu ve eğer böyle bir olasılık yoksa?
O zaman hiçbir şekilde. Burada tartışmalı bir durum var, bir yandan optimize edici ücretsiz ve daha fazla çalışmaya hazır, ancak diğer yandan bindirmeler olabilir - karar duruma bağlıdır.
Acaba soldakiyle tam olarak aynı tasarımı kullanan işlevler (sınıflar, yapılar ...) için yorum kullanan birçok insan var mı?
Çok sık ve kalın kullanırım (Doğru, “kareler” şeklinde çizmiyorum, “aynen böyle” yazıyorum.
İşte mevcut ticaret geçmişi arayüz dosyam. Ve bu maksimum yorum değil.
Genel olarak, sınıf ne kadar spesifik olursa, o kadar fazla yoruma sahip olmalıdır.
Eh, Peter Konov gibi bir mega hafızanız olması dışında - burada yorum yapmadan yapabilirsiniz.
Evet, kim neyi seviyor. Şahsen, kodun kendisini göremediğim kod biçimlendirmesinden gözlerim kamaşıyor
Belki de Visual Studio Code'da uzmanlaşmak iyi bir çözüm olabilir.
He-he-o... Ve "ağaçlardan ormanı göremediğinizde" gözlerimde dalgalanmalar oluyor.
Sadece yukarıdaki parçada - her şey doğru görünüyor, ancak tek bir yorum olmadan ve bu "çevre" gibi, boşluklar olmadan, kahretsin, bunu anlamak ne kadar zor ...
Bu tarz yorumları gözümü tıkadığı için hemen siliyorum ve böyle yazıyorum
İçinde! Evet.
Kısa ve basit işlevler için - bence en normal yorum tarzı.
Ben de 5 sent koyacağım.
Biçimlendirmeye gelince. Birkaç stil girmeniz gerekiyor. Bir - MQ'dan olan. Bunu öneririm:
Ben de 5 sent koyacağım.
Biçimlendirmeye gelince. Birkaç stil girmeniz gerekiyor. Biri MQ'dan olan. Bunu öneririm:
Şu anki tarzda en sevmediğim şey kaşlı kaşlı ayraçlar. Neden onları taşıdılar, anlamıyorum. Örneğinizde olduğu gibi her zaman tüm parantezleri Tab ile hizalarım.
Çok sık ve kalın kullanırım (Doğru, “kareler” şeklinde çizmiyorum, “aynen böyle” yazıyorum.
İşte mevcut ticaret geçmişi arayüz dosyam. Ve bu maksimum yorum değil.
Genel olarak, sınıf ne kadar spesifik olursa, o kadar fazla yoruma sahip olmalıdır.
Eh, Peter Konov gibi bir mega hafızanız olması dışında - burada yorum yapmadan yapabilirsiniz.
Benzer bir tane var, sadece yorum daha küçük :).
Yapmam gerektiği gibi, listenin her yerine "bulaştıran" yorumlardan hoşlanmıyorum.
Bunu devre dışı bırakabilmek güzel olurdu:
Bana tam olarak nasıl yorum yaptığınızı söyler misiniz? Manuel olarak mı düzenliyorsunuz? Gizli bir kombinasyon var mı?
Böyle bir durum:
Strateji test cihazında optimize ediyorum, tamamlandıktan sonra, sonuçları analiz etmek veya sadece veri toplamak için OnTesterDeinit() yürütülüyor. Yani şu anda, strateji test cihazı sanki her şey bitmiş gibi bir duruma giriyor, ancak bu zamanda, verilerin son işlenmesi arka planda uzun zaman alabilir. Gösterge tablosunun bulunduğu pencere kapatıldığında, Expert Advisor'ın işi zorla sonlandırılır.
OnTesterDeinit() bir dosyaya yazdığında, mevcut optimizasyonun bittiğini düşünerek, hızlı bir şekilde hesaplanan minimum parametre aralıkları ile bir sonrakini başlatalım. Sonuç olarak, önceki lansmanımız tamamlanmadı ve yenisi aynı aşamada, örneğimizde bu bir dosya yazma erişim hatasına veya dosyada yalnızca bir karmaya yol açıyor, ancak bu görsel olarak izlenemez, yalnızca load manager veya file... Test cihazında bu işlemin henüz tamamlanmadığını görebilmek istiyorum.
Böyle bir durum:
Strateji test cihazında optimize ediyorum, tamamlandıktan sonra, sonuçları analiz etmek veya sadece veri toplamak için OnTesterDeinit() yürütülüyor. Yani şu anda, strateji test cihazı sanki her şey bitmiş gibi bir duruma giriyor, ancak bu zamanda, verilerin son işlenmesi arka planda uzun zaman alabilir. Gösterge tablosunun bulunduğu pencere kapatıldığında, Expert Advisor'ın işi zorla sonlandırılır.
OnTesterDeinit() bir dosyaya yazdığında, mevcut optimizasyonun bittiğini düşünerek, hızlı bir şekilde hesaplanan minimum parametre aralıkları ile bir sonrakini başlatalım. Sonuç olarak, önceki lansmanımız tamamlanmadı ve yenisi aynı aşamada, örneğimizde bu bir dosya yazma erişim hatasına veya dosyada yalnızca bir karmaya yol açıyor, ancak bu görsel olarak izlenemez, yalnızca load manager veya file... Test cihazında bu işlemin henüz tamamlanmadığını görebilmek istiyorum.
Optimize ederken, yeni bir grafik penceresi açılır - belki bir şekilde işin sonunu grafik kimliğine göre öğrenebilirsiniz? Grafiği kapatmak mümkün görünüyor, ardından OnTesterDeinit()'te hesaplamalar tamamlandıktan sonra pencereyi kapatabilirsiniz ve sonunda, sadece o sırada açık olan grafiğin varlığını izlememiz gerekiyor. optimizasyon başlangıcı, nasıl ortadan kalktı - test cihazı yeni bir optimizasyon için hazır.
Optimize ederken, yeni bir grafik penceresi açılır - belki bir şekilde işin sonunu grafik kimliğine göre öğrenebilirsiniz? Grafiği kapatmak mümkün görünüyor, ardından OnTesterDeinit()'te hesaplamalar tamamlandıktan sonra pencereyi kapatabilirsiniz ve sonunda, sadece o sırada açık olan grafiğin varlığını izlememiz gerekiyor. optimizasyon başlangıcı, nasıl ortadan kalktı - test cihazı yeni bir optimizasyon için hazır.
Yani değiştirilmesi gereken kod bu ve eğer böyle bir olasılık yoksa?
Yani değiştirilmesi gereken kod bu ve eğer böyle bir olasılık yoksa?
O zaman hiçbir şekilde. Burada tartışmalı bir durum var, bir yandan optimize edici ücretsiz ve daha fazla çalışmaya hazır, ancak diğer yandan bindirmeler olabilir - karar duruma bağlıdır.