MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1271 1...126412651266126712681269127012711272127312741275127612771278...1953 新しいコメント Dmitri Custurov 2020.10.10 19:33 #12701 端末を手動で再起動した場合、変更内容がデフォルトのプロファイルに保存されない場合があります。これは何だろう?どのような状況下で の設定は確実に保存されているのでしょうか?もしかしたら、アドバイザーやインジケーターは、設定をディスクにリセット するために最低限必要な時間、待機する必要があるかもしれません。 Windows Server 2012 R2 Standard x64、IE 11、RDP、UAC、2 x Intel Xeon E3-12xx v2 (Ivy Bridge、IBRS)、メモリ:2970 / 3999 Mb、ディスク:2 / 19 Gb 端末MT4。いくつかのブローカーを試しました。 graf1976 2020.10.10 21:01 #12702 こんにちは。 助けてくださいということです。MQL4でファイル操作がわからない。以下はそのコードです。 double Lot; string file_name = "Test "+Symbol()+".csv"; int filehandle; //+------------------------------------------------------------------+ int OnInit() { //----- Создание файла ResetLastError(); if(!FileIsExist(file_name)) { Print("Файл <",file_name,"> отсутствует. Создание файла."); filehandle=FileOpen(file_name,FILE_WRITE|FILE_CSV); if(filehandle!=INVALID_HANDLE) { FileWrite(filehandle,0.1); //FileWriteDouble(filehandle,0.1,DOUBLE_VALUE); FileClose(filehandle); } else Comment("Файл не создан, ошибка ",GetLastError()); } else Print("Файл <",file_name,"> существует"); //----- Чтение файла ResetLastError(); filehandle=FileOpen(file_name,FILE_READ|FILE_BIN); if(filehandle!=INVALID_HANDLE) { Print("Файл <",file_name,"> открыт для чтения"); Lot=FileReadDouble(filehandle,DOUBLE_VALUE); Print("Lot = ",Lot); FileClose(filehandle); } else Comment("Файл не создан, ошибка ",GetLastError()); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { FileDelete(file_name); } //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ Test EURUSD.csvファイルを作成します - すべてOKです。ファイルに「0.1」を入れています。 ログに "Lot = 0.0 "と記録されます。 コンパイルしても、エラーは出ません。 私はすでに "私の脳を壊した" - 私はどこにエラーが発生した理解していない。 協力してくれる皆さんには、とても感謝しています。 Sysmart 2020.10.10 21:30 #12703 Vladimir Pastushak:すべてのコードを持ってきてください。ほとんど全部です。しかし、私はまた、別のカウント:ダブルiK2 =(numPosOr - numStepCount)/ numPosOr- それは判明した= 0。 Alekseu Fedotov 2020.10.11 05:18 #12704 graf1976:こんにちは。助けてくださいということです。MQL4でファイル操作がわからない。以下はそのコードです。Test EURUSD.csvファイルを作成します - すべてOKです。ファイルに「0.1」を入れています。ログに "Lot = 0.0 "と記録されます。コンパイルしても、エラーは出ません。私はすでに "私の脳を壊した" - 私はどこにエラーが発生した理解していない。協力してくださる皆様に、前もってお礼を申し上げたいと思います。 エラーはここだと思います filehandle=FileOpen(file_name,FILE_READ| FILE_BIN); // надо FILE_CSV graf1976 2020.10.11 07:40 #12705 Alekseu Fedotov:ここに間違いがあります ありがとう、でも役に立たなかった。それでもログにnullという結果が出ました。 Alekseu Fedotov 2020.10.11 08:21 #12706 graf1976: ありがとうございます、でも役に立ちませんでした。ログにはまだゼロの結果が出力されています。 graf1976: ありがとうございます、でも役に立ちませんでした。それでもログに残る結果は0件でした。 また 置換機能 FileReadDouble(filehandle,DOUBLE_VALUE); まで FileReadNumber(filehandle); graf1976 2020.10.11 08:34 #12707 Alekseu Fedotov:また機能を置き換えるまで アレクセイ、本当にありがとう。 ファンクション交換後-動作しました。 削除済み 2020.10.11 11:40 #12708 専門家のためのそのような準備が正しいかどうか、またはロジックを別の方法で編成する方が良いかどうかを専門家に尋ねたいと思います。 //+------------------------------------------------------------------+ //| 01 Sample.mq5 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #define MACD_MAGIC 1234503 //--- #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> #include <Trade\PositionInfo.mqh> #include <Trade\AccountInfo.mqh> //--- CTrade m_trade; // trading object CSymbolInfo m_symbol; // symbol info object CPositionInfo m_position; // trade position object CAccountInfo m_account; // account info wrapper //--- input double MaximumRisk = 0.02 ; // Maximum Risk in percentage input double DecreaseFactor = 3 ; // Descrease factor input int InpMACDOpenLevel = 3 ; // MACD open level (in pips) input int InpMACDCloseLevel= 2 ; // MACD close level (in pips) input int InpMATrendPeriod = 26 ; // MA trend period //--- double m_macd_open_level = 0.0 ; // double m_macd_close_level = 0.0 ; // datetime ExtPrevBars = 0 ; // "0" -> D'1970.01.01 00:00'; datetime ExtPrevBars_0 = 0 ; // "0" -> D'1970.01.01 00:00'; int m_handle_macd; // MACD indicator handle int m_handle_ema; // Moving Average indicator handle double m_adjusted_point; // point value adjusted for 3 or 5 points //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double TradeSizeOptimized( void ) { double price= 0.0 ; double margin= 0.0 ; //--- select lot size if (! SymbolInfoDouble ( _Symbol , SYMBOL_ASK ,price)) return ( 0.0 ); if (! OrderCalcMargin ( ORDER_TYPE_BUY , _Symbol , 1.0 ,price,margin)) return ( 0.0 ); if (margin<= 0.0 ) return ( 0.0 ); double lot= NormalizeDouble ( AccountInfoDouble ( ACCOUNT_MARGIN_FREE )*MaximumRisk/margin, 2 ); //--- calculate number of losses orders without a break if (DecreaseFactor> 0 ) { //--- select history for access HistorySelect ( 0 , TimeCurrent ()); //--- int orders= HistoryDealsTotal (); // total history deals int losses= 0 ; // number of losses orders without a break for ( int i=orders- 1 ; i>= 0 ; i--) { ulong ticket= HistoryDealGetTicket (i); if (ticket== 0 ) { Print ( "HistoryDealGetTicket failed, no trade history" ); break ; } //--- check symbol if ( HistoryDealGetString (ticket, DEAL_SYMBOL )!= _Symbol ) continue ; //--- check Expert Magic number if ( HistoryDealGetInteger (ticket, DEAL_MAGIC )!=MACD_MAGIC) continue ; //--- check profit double profit= HistoryDealGetDouble (ticket, DEAL_PROFIT ); if (profit> 0.0 ) break ; if (profit< 0.0 ) losses++; } //--- if (losses> 1 ) lot= NormalizeDouble (lot-lot*losses/DecreaseFactor, 1 ); } //--- normalize and check limits double stepvol= SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP ); lot=stepvol* NormalizeDouble (lot/stepvol, 0 ); double minvol= SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN ); if (lot<minvol) lot=minvol; double maxvol= SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MAX ); if (lot>maxvol) lot=maxvol; //--- return trading volume return (lot); } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit () { //--- initialize common information m_symbol.Name( Symbol ()); // symbol RefreshRates(); m_trade.SetExpertMagicNumber(MACD_MAGIC); // magic m_trade.SetMarginMode(); m_trade.SetTypeFillingBySymbol( Symbol ()); //--- tuning for 3 or 5 digits int digits_adjust= 1 ; if (m_symbol. Digits ()== 3 || m_symbol. Digits ()== 5 ) digits_adjust= 10 ; m_adjusted_point=m_symbol. Point ()*digits_adjust; //--- set default deviation for trading in adjusted points m_macd_open_level =InpMACDOpenLevel*m_adjusted_point; m_macd_close_level=InpMACDCloseLevel*m_adjusted_point; //--- set default deviation for trading in adjusted points m_trade.SetDeviationInPoints( 3 *digits_adjust); //--- //--- create MACD indicator m_handle_macd= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ); //--- if the handle is not created if (m_handle_macd== INVALID_HANDLE ) { //--- tell about the failure and output the error code PrintFormat ( "Failed to create handle of the handle_iCustom indicator for the symbol %s/%s, error code %d" , Symbol (), EnumToString ( Period ()), GetLastError ()); //--- the indicator is stopped early return ( INIT_FAILED ); } //--- Moving Average indicator m_handle_ema= iMA ( NULL , 0 ,InpMATrendPeriod, 0 , MODE_EMA , PRICE_CLOSE ); //--- if the handle is not created if (m_handle_ema== INVALID_HANDLE ) { //--- tell about the failure and output the error code PrintFormat ( "Failed to create handle of the handle_iCustom indicator for the symbol %s/%s, error code %d" , Symbol (), EnumToString ( Period ()), GetLastError ()); //--- the indicator is stopped early return ( INIT_FAILED ); } //--- return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit ( const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick () { //--- refresh rates RefreshRates(); CheckForOpen(); CheckForClose(); } //+------------------------------------------------------------------+ //| Check for long position closing | //+------------------------------------------------------------------+ bool LongClosed( void ) { bool res= false ; //--- should it be closed? for ( int i= PositionsTotal ()- 1 ; i>= 0 ; i--) // returns the number of current positions if (m_position.SelectByIndex(i)) // selects the position by index for further access to its properties if (m_position. Symbol ()== Symbol ()) { if (m_position.PositionType()== POSITION_TYPE_BUY ) { ClosePosition(m_position. Symbol ()); // close a position by the specified symbo printf ( "Long position by %s to be closed : '%s'" , Symbol (),m_trade.ResultComment()); //--- processed and cannot be modified res= true ; } } //--- result return (res); } //+------------------------------------------------------------------+ //| Check for short position closing | //+------------------------------------------------------------------+ bool ShortClosed( void ) { bool res= false ; //--- should it be closed? for ( int i= PositionsTotal ()- 1 ; i>= 0 ; i--) // returns the number of current positions if (m_position.SelectByIndex(i)) // selects the position by index for further access to its properties if (m_position. Symbol ()== Symbol ()) { if (m_position.PositionType()== POSITION_TYPE_SELL ) { ClosePosition(m_position. Symbol ()); // close a position by the specified symbo printf ( "Short position by %s to be closed : '%s'" , Symbol (),m_trade.ResultComment()); //--- processed and cannot be modified res= true ; } } //--- result return (res); } //+------------------------------------------------------------------+ //| Check for long position opening | //+------------------------------------------------------------------+ bool LongOpened( void ) { bool res= false ; //--- check for long position (BUY) possibility double price=m_symbol.Ask(); //--- open position if (m_trade.PositionOpen( Symbol (), ORDER_TYPE_BUY ,TradeSizeOptimized(),price, 0.0 , 0.0 )) printf ( "Position by %s to be opened" , Symbol ()); else { printf ( "Error opening BUY position by %s : '%s'" , Symbol (),m_trade.ResultComment()); printf ( "Open parameters : price=%f,TP=%f" ,price, 0.0 ); } //--- in any case we must exit from expert res= true ; //--- result return (res); } //+------------------------------------------------------------------+ //| Check for short position opening | //+------------------------------------------------------------------+ bool ShortOpened( void ) { bool res= false ; //--- check for short position (SELL) possibility double price=m_symbol.Bid(); //--- open position if (m_trade.PositionOpen( Symbol (), ORDER_TYPE_SELL ,TradeSizeOptimized(),price, 0.0 , 0.0 )) printf ( "Position by %s to be opened" , Symbol ()); else { printf ( "Error opening SELL position by %s : '%s'" , Symbol (),m_trade.ResultComment()); printf ( "Open parameters : price=%f,TP=%f" ,price, 0.0 ); } //--- in any case we must exit from expert res= true ; //--- result return (res); } //+------------------------------------------------------------------+ //| Check for open position conditions | //+------------------------------------------------------------------+ bool CheckForOpen( void ) { bool res= false ; //--- we work only at the time of the birth of new bar datetime time_0= iTime ( Symbol (), Period (), 0 ); if (time_0==ExtPrevBars) return ( false ); ExtPrevBars=time_0; if (!RefreshRates()) { ExtPrevBars= 0 ; return ( false ); } //--- double main[],signal[],ma[]; ArraySetAsSeries (main, true ); ArraySetAsSeries (signal, true ); ArraySetAsSeries (ma, true ); int start_pos= 0 ,count= 3 ; if (!iGetArray(m_handle_macd, MAIN_LINE ,start_pos,count,main) || !iGetArray(m_handle_macd, SIGNAL_LINE ,start_pos,count,signal) || !iGetArray(m_handle_ema, 0 ,start_pos,count,ma)) { ExtPrevBars= 0 ; return ( false ); } //--- check for long position (BUY) possibility if (main[ 0 ]< 0 ) if (main[ 0 ]>signal[ 0 ] && main[ 1 ]<signal[ 1 ]) if ( MathAbs (main[ 0 ])>(m_macd_open_level) && ma[ 0 ]>ma[ 1 ]) { LongOpened(); res= true ; } //--- check for short position (SELL) possibility if (main[ 0 ]> 0 ) if (main[ 0 ]<signal[ 0 ] && main[ 1 ]>signal[ 1 ]) if (main[ 0 ]>(m_macd_open_level) && ma[ 0 ]<ma[ 1 ]) { ShortOpened(); res= true ; } //--- return ( true ); } //+------------------------------------------------------------------+ //| Check for close position conditions | //+------------------------------------------------------------------+ bool CheckForClose( void ) { bool res= false ; //--- we work only at the time of the birth of new bar datetime time_0= iTime ( Symbol (), Period (), 0 ); if (time_0==ExtPrevBars_0) return ( false ); ExtPrevBars_0=time_0; if (!RefreshRates()) { ExtPrevBars_0= 0 ; return ( false ); } //--- double main[],signal[],ma[]; ArraySetAsSeries (main, true ); ArraySetAsSeries (signal, true ); ArraySetAsSeries (ma, true ); int start_pos= 0 ,count= 3 ; if (!iGetArray(m_handle_macd, MAIN_LINE ,start_pos,count,main) || !iGetArray(m_handle_macd, SIGNAL_LINE ,start_pos,count,signal) || !iGetArray(m_handle_ema, 0 ,start_pos,count,ma)) { ExtPrevBars_0= 0 ; return ( false ); } //--- should it be closed? if (main[ 0 ]< 0 ) if (main[ 0 ]>signal[ 0 ] && main[ 1 ]<signal[ 1 ]) if ( MathAbs (main[ 0 ])>m_macd_close_level) { ShortClosed(); res= true ; } //--- should it be closed? if (main[ 0 ]> 0 ) if (main[ 0 ]<signal[ 0 ] && main[ 1 ]>signal[ 1 ]) if (main[ 0 ]>m_macd_close_level) { LongClosed(); res= true ; } //--- return ( true ); } //+------------------------------------------------------------------+ //| Get value of buffers | //+------------------------------------------------------------------+ double iGetArray( const int handle, const int buffer, const int start_pos, const int count, double &arr_buffer[]) { bool result= true ; if (! ArrayIsDynamic (arr_buffer)) { Print ( "This a no dynamic array!" ); return ( false ); } ArrayFree (arr_buffer); //--- reset error code ResetLastError (); //--- fill a part of the iBands array with values from the indicator buffer int copied= CopyBuffer (handle,buffer,start_pos,count,arr_buffer); if (copied!=count) { //--- if the copying fails, tell the error code PrintFormat ( "Failed to copy data from the indicator, error code %d" , GetLastError ()); //--- quit with zero result - it means that the indicator is considered as not calculated return ( false ); } return (result); } //+------------------------------------------------------------------+ //| Refreshes the symbol quotes data | //+------------------------------------------------------------------+ bool RefreshRates() { //--- refresh rates if (!m_symbol.RefreshRates()) { Print ( __FILE__ , " " , __FUNCTION__ , ", ERROR: " , "RefreshRates error" ); return ( false ); } //--- protection against the return value of "zero" if (m_symbol.Ask()== 0 || m_symbol.Bid()== 0 ) { Print ( __FILE__ , " " , __FUNCTION__ , ", ERROR: " , "Ask == 0.0 OR Bid == 0.0" ); return ( false ); } //--- return ( true ); } //+------------------------------------------------------------------+ //| Close selected position | //+------------------------------------------------------------------+ void ClosePosition( const string symbol) { if (InitTrade(symbol)) m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbo PlaySound ( "ok.wav" ); } //+------------------------------------------------------------------+ //| Init trade object | //+------------------------------------------------------------------+ bool InitTrade( const string symbol) { if (!m_symbol.Name(symbol)) // sets symbol name return ( false ); //--- if (IsFillingTypeAllowed(symbol, SYMBOL_FILLING_FOK )) m_trade.SetTypeFilling( ORDER_FILLING_FOK ); else if (IsFillingTypeAllowed(symbol, SYMBOL_FILLING_IOC )) m_trade.SetTypeFilling( ORDER_FILLING_IOC ); else m_trade.SetTypeFilling( ORDER_FILLING_RETURN ); //--- return ( true ); //--- } //+------------------------------------------------------------------+ //| Checks if the specified filling mode is allowed | //+------------------------------------------------------------------+ bool IsFillingTypeAllowed( string symbol, int fill_type) { //--- Obtain the value of the property that describes allowed filling modes int filling=( int ) SymbolInfoInteger (symbol, SYMBOL_FILLING_MODE ); //--- Return true, if mode fill_type is allowed return ((filling & fill_type)==fill_type); } //+------------------------------------------------------------------+ Sysmart 2020.10.11 12:17 #12709 Sysmart:numPosOr= 4;numStepCount= 1;iK = (numPosOr - numStepCount) / numPosOr;なぜこの計算ではiK=0になるのでしょうか? ヒントをくれる人はいないのでしょうか? 削除済み 2020.10.11 12:57 #12710 Sysmart:教えてくれる人はいないのでしょうか? あなたの問題は何ですか? 機能に何を求めていますか? その時は、一緒に解決策を考えましょう。 1...126412651266126712681269127012711272127312741275127612771278...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
端末を手動で再起動した場合、変更内容がデフォルトのプロファイルに保存されない場合があります。これは何だろう?どのような状況下で
の設定は確実に保存されているのでしょうか?もしかしたら、アドバイザーやインジケーターは、設定をディスクにリセット するために最低限必要な時間、待機する必要があるかもしれません。
Windows Server 2012 R2 Standard x64、IE 11、RDP、UAC、2 x Intel Xeon E3-12xx v2 (Ivy Bridge、IBRS)、メモリ:2970 / 3999 Mb、ディスク:2 / 19 Gb
端末MT4。いくつかのブローカーを試しました。
こんにちは。
助けてくださいということです。MQL4でファイル操作がわからない。以下はそのコードです。
Test EURUSD.csvファイルを作成します - すべてOKです。ファイルに「0.1」を入れています。
ログに "Lot = 0.0 "と記録されます。
コンパイルしても、エラーは出ません。
私はすでに "私の脳を壊した" - 私はどこにエラーが発生した理解していない。
協力してくれる皆さんには、とても感謝しています。
すべてのコードを持ってきてください。
ほとんど全部です。しかし、私はまた、別のカウント:ダブルiK2 =(numPosOr - numStepCount)/ numPosOr- それは判明した= 0。
こんにちは。
助けてくださいということです。MQL4でファイル操作がわからない。以下はそのコードです。
Test EURUSD.csvファイルを作成します - すべてOKです。ファイルに「0.1」を入れています。
ログに "Lot = 0.0 "と記録されます。
コンパイルしても、エラーは出ません。
私はすでに "私の脳を壊した" - 私はどこにエラーが発生した理解していない。
協力してくださる皆様に、前もってお礼を申し上げたいと思います。
エラーはここだと思います
ここに間違いがあります
ありがとうございます、でも役に立ちませんでした。ログにはまだゼロの結果が出力されています。
ありがとうございます、でも役に立ちませんでした。それでもログに残る結果は0件でした。
また
置換機能
FileReadDouble(filehandle,DOUBLE_VALUE);
まで
FileReadNumber(filehandle);
また
機能を置き換える
まで
アレクセイ、本当にありがとう。
ファンクション交換後-動作しました。
専門家のためのそのような準備が正しいかどうか、またはロジックを別の方法で編成する方が良いかどうかを専門家に尋ねたいと思います。
numPosOr= 4;
numStepCount= 1;
iK = (numPosOr - numStepCount) / numPosOr;
なぜこの計算ではiK=0になるのでしょうか?
ヒントをくれる人はいないのでしょうか?
教えてくれる人はいないのでしょうか?
あなたの問題は何ですか? 機能に何を求めていますか?
その時は、一緒に解決策を考えましょう。