初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 773 1...766767768769770771772773774775776777778779780...1503 新しいコメント 0Aleksandr0 2017.08.22 11:46 #7721 ありがとうございます。 登録したばかりで、まだフォーラムの機能を知りません。 --- 2017.08.22 12:38 #7722 0Aleksandr0:WinAPIがわからないのですが、何がいけないのでしょうか?頑張っている姿をスクリプトという形で見せてください Artyom Trishkin 2017.08.22 12:52 #7723 0Aleksandr0:私はこれをEAの関数として持っており、以下はそのコードの始まりです。これは関数そのものです。EAの残りの部分は問題なく動作し、関数内にある変数はコードの他のどこにも使用されていません。 行目でターミナルがクラッシュするSetClipboardData( CF_UNICODETEXT, hMem );// バッファに文字列を含むメモリーを渡す 0Aleksandr0 2017.08.22 12:55 #7724 Artyom Trishkin: なるほど、訂正します) 0Aleksandr0 2017.08.22 12:55 #7725 o_o:あなたの努力をスクリプトとして見せてください私はこれをEAの関数として持っており、以下はそのコードの始まりです。#define CF_UNICODETEXT 13 #define GHND 0x0042 #import "User32.dll" int OpenClipboard( uint ); int EmptyClipboard(); int CloseClipboard(); uint SetClipboardData( uint uFormat, uint hMem ); #import "Kernel32.dll" uint GlobalAlloc( uint uFlags, uint dwBytes ); uint GlobalLock( uint hMem ); int GlobalUnlock( uint hMem ); #import "msvcrt.dll" uint memcpy( uint &dest, string src, uint count ); #import string text = "AAA"; これは関数そのものです。 void OutClipboard() { uint hwnd = (uint)ChartGetInteger( 0, CHART_WINDOW_HANDLE ); int strSize = StringLen( text ) * 2 + 2; // Получаем размер строки в байтах if( OpenClipboard( hwnd ) ) // Открываем буфер { EmptyClipboard(); // Очищаем буфер uint hMem = GlobalAlloc( GHND, strSize ); // Выделяем память uint pMem = GlobalLock( hMem ); // Получаем адрес выделенной памяти memcpy( pMem, text, strSize ); // Копируем строку в память GlobalUnlock( hMem ); SetClipboardData( CF_UNICODETEXT, hMem ); // Передаём память со строкой в буфер CloseClipboard(); // Закрываем буфер } }EAの残りの部分は問題なく動作し、関数内にある変数はコードの他のどこにも使用されていません。 行目でターミナルがクラッシュするSetClipboardData( CF_UNICODETEXT, hMem );// バッファに文字列を含むメモリーを渡す 0Aleksandr0 2017.08.22 14:57 #7726 //+------------------------------------------------------------------+ //| Clipboard.mq4 | //| ПавелИванович(api) | //| p231970@hotmail.com | //| Перенос на MQL5 и доработка unicode - Сергеев Алексей (sergeev) | //| profy.mql@gmail.com | //+------------------------------------------------------------------+ #property version "1.00" #property description "Getting contents of the clipboard" #import "user32.dll" bool OpenClipboard(int hwnd); int GetClipboardData(int uFormat); bool CloseClipboard(); int GetAncestor(long hWnd,int gaFlags); int GetAncestor(int hWnd,int gaFlags); #import "kernel32.dll" int GlobalLock(int hMem); bool GlobalUnlock(int hMem); string lstrcatW(int dst,string src); #import //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ int OnStart() { int hMain; string clip=""; //--- if(_IsX64) hMain=GetAncestor(ChartGetInteger(ChartID(),CHART_WINDOW_HANDLE),2); else hMain=GetAncestor((int)ChartGetInteger(ChartID(),CHART_WINDOW_HANDLE),2); //--- if(OpenClipboard(hMain)) { int hglb=GetClipboardData(1/*CF_TEXT*/); if(hglb!=0) { int lptstr=GlobalLock(hglb); if(lptstr!=0) { clip=lstrcatW(lptstr,""); GlobalUnlock(hglb); } } CloseClipboard(); } // translate ANSI to UNICODE ushort chW; uchar chA; string rez; for(int i=0; i<StringLen(clip); i++) { chW=StringGetCharacter(clip, i); chA=uchar(chW&255); rez=rez+CharToString(chA); chA=uchar(chW>>8&255); rez=rez+CharToString(chA); } MessageBox("Clipboard: \n"+rez,"Clipboard"); return(0); } //+------------------------------------------------------------------+このスクリプトは、バッファを読み込んでターミナルウィンドウに値を出力すると思われるのですが、これもうまくいきません。ターミナルを殺すわけではありませんが、ウィンドウに何も出力されません。 バッファとは謎ですね、とりあえずAlertへのデータ出力は制限しておきます、ctrl+cでデータコピーできますから、「手動」は避けたかったのですが。 Koldun Zloy 2017.08.22 15:33 #7727 その例はMT4用なので、桁数を考慮していない。ここでは、すべてのプラットフォームに対応したものを紹介します。#ifdef __MQL5__ #define _WIN64 // Только для 64-разрядного терминала! #endif #include <WinDef.mqh> #define CF_UNICODETEXT 13 #define GHND 0x0042 #import "User32.dll" BOOL OpenClipboard( HWND ); BOOL EmptyClipboard(); BOOL CloseClipboard(); HANDLE SetClipboardData( uint uFormat, HANDLE hMem ); #import "Kernel32.dll" HANDLE GlobalAlloc( uint uFlags, size_t dwBytes ); LPVOID GlobalLock( HANDLE hMem ); BOOL GlobalUnlock( HANDLE hMem ); #import "msvcrt.dll" PVOID memcpy( PVOID dest, string src, size_t count ); #import string str = "АБВГД"; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { HWND hwnd = (HWND)ChartGetInteger( 0, CHART_WINDOW_HANDLE ); size_t strSize = StringLen( str ) * 2 + 2; // Получаем размер строки в байтах if( OpenClipboard( hwnd ) ) // Открываем буфер { EmptyClipboard(); // Очищаем буфер HANDLE hMem = GlobalAlloc( GHND, strSize ); // Выделяем память PVOID pMem = GlobalLock( hMem ); // Получаем адрес выделенной памяти memcpy( pMem, str, strSize ); // Копируем строку в память GlobalUnlock( hMem ); SetClipboardData( CF_UNICODETEXT, hMem ); // Передаём память со строкой в буфер CloseClipboard(); // Закрываем буфер } } //+------------------------------------------------------------------+ ファイル: WinDef.mqh 1 kb 0Aleksandr0 2017.08.22 15:51 #7728 Koldun Zloy:その例はMT4のものなので、ビットレートは考慮されていません。ここでは、すべてのプラットフォームに対応したものを紹介します。特にバッファを読み込んでいる2番目のスクリプトを見て、容量に不審を抱いたんです。 それだけで直るなら、少なくとも1ヶ月後にはわかっていたはずです))。 ありがとうございました、時間の節約になりました)。 すぐにEAに統合する) Aleksey Vyazmikin 2017.08.22 22:55 #7729 MT5でコードを書き換えるのを手伝ってください - 私は注文が苦手です :(//+------------------------------------------------------------------+ //| Расчёт статистик | //+------------------------------------------------------------------+ bool CTradeStatistics::Calculate(const bool _to_log=false,const double _init_balance=0.0) { //--- if(_init_balance>0.) m_init_deposit=_init_balance; else { m_init_deposit=TesterStatistics(STAT_INITIAL_DEPOSIT); double curr_balance=m_init_deposit; if(!m_balance_arr.Add(curr_balance)) { if(_to_log) Print("Ошибка добавления значения депозита."); return false; } //--- int orders_num=OrdersHistoryTotal(); if(orders_num<1) { if(_to_log) Print("Нет ордеров в истории."); return false; } //--- собрать данные for(int ord_idx=0;ord_idx<orders_num;ord_idx++) if(OrderSelect(ord_idx,SELECT_BY_POS,MODE_HISTORY)) { ENUM_ORDER_TYPE curr_ord_type=(ENUM_ORDER_TYPE)OrderType(); if((curr_ord_type==ORDER_TYPE_BUY) || (curr_ord_type==ORDER_TYPE_SELL)) if(OrderCloseTime()>0) { //int ord_ticket=OrderTicket();// del //--- добавить профит ордера double curr_ord_profit=OrderProfit()-OrderCommission()+OrderSwap(); if(!m_orders_arr.Add(curr_ord_profit)) { if(_to_log) Print("Ошибка добавления значения профита."); return false; } //--- добавить текущее значение баланса curr_balance+=curr_ord_profit; if(!m_balance_arr.Add(curr_balance)) { if(_to_log) Print("Ошибка добавления значения депозита."); return false; } } } } コンパイル時にエラーが発生する。'SELECT_BY_POS' - 未宣言の識別子 KamikadzeStatistics.mqh 257 33'MODE_HISTORY' - 未宣言の識別子 KamikadzeStatistics.mqh 257 47'OrderSelect' - 誤ったパラメータ数 KamikadzeStatistics.mqh 257 13'OrderType' -function not defined KamikadzeStatistics.mqh 259 60'OrderCloseTime' - function not defined KamikadzeStatistics.mqh 261 19'OrderProfit' - function not defined KamikadzeStatistics.mqh 265 42 0Aleksandr0 2017.08.23 00:25 #7730 Aleksey Vyazmikin:MT5でコードを書き換えるのを手伝ってください - 注文は苦手です :(コンパイル時にエラーが発生する。'SELECT_BY_POS' - 未宣言の識別子 KamikadzeStatistics.mqh 257 33'MODE_HISTORY' - 未宣言の識別子 KamikadzeStatistics.mqh 257 47'OrderSelect' - 誤ったパラメータ数 KamikadzeStatistics.mqh 257 13'OrderType' -function not defined KamikadzeStatistics.mqh 259 60'OrderCloseTime' - function not defined KamikadzeStatistics.mqh 261 19'OrderProfit' - function not defined KamikadzeStatistics.mqh 265 42これは何でしょう?MQL4が苦手なのですが、必要なものを教えていただければ、すべてMQL5で書けるようになります。 履歴の損益計算と関係があるのでしょうか? 1...766767768769770771772773774775776777778779780...1503 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ありがとうございます。
登録したばかりで、まだフォーラムの機能を知りません。
WinAPIがわからないのですが、何がいけないのでしょうか?
頑張っている姿をスクリプトという形で見せてください
私はこれをEAの関数として持っており、以下はそのコードの始まりです。
これは関数そのものです。
EAの残りの部分は問題なく動作し、関数内にある変数はコードの他のどこにも使用されていません。
行目でターミナルがクラッシュするSetClipboardData( CF_UNICODETEXT, hMem );// バッファに文字列を含むメモリーを渡す
なるほど、訂正します)
あなたの努力をスクリプトとして見せてください
私はこれをEAの関数として持っており、以下はそのコードの始まりです。
これは関数そのものです。
EAの残りの部分は問題なく動作し、関数内にある変数はコードの他のどこにも使用されていません。
行目でターミナルがクラッシュするSetClipboardData( CF_UNICODETEXT, hMem );// バッファに文字列を含むメモリーを渡す
このスクリプトは、バッファを読み込んでターミナルウィンドウに値を出力すると思われるのですが、これもうまくいきません。
ターミナルを殺すわけではありませんが、ウィンドウに何も出力されません。
バッファとは謎ですね、とりあえずAlertへのデータ出力は制限しておきます、ctrl+cでデータコピーできますから、「手動」は避けたかったのですが。
その例はMT4用なので、桁数を考慮していない。
ここでは、すべてのプラットフォームに対応したものを紹介します。
その例はMT4のものなので、ビットレートは考慮されていません。
ここでは、すべてのプラットフォームに対応したものを紹介します。
特にバッファを読み込んでいる2番目のスクリプトを見て、容量に不審を抱いたんです。
それだけで直るなら、少なくとも1ヶ月後にはわかっていたはずです))。
ありがとうございました、時間の節約になりました)。
すぐにEAに統合する)
MT5でコードを書き換えるのを手伝ってください - 私は注文が苦手です :(
コンパイル時にエラーが発生する。
'SELECT_BY_POS' - 未宣言の識別子 KamikadzeStatistics.mqh 257 33
'MODE_HISTORY' - 未宣言の識別子 KamikadzeStatistics.mqh 257 47
'OrderSelect' - 誤ったパラメータ数 KamikadzeStatistics.mqh 257 13
'OrderType' -function not defined KamikadzeStatistics.mqh 259 60
'OrderCloseTime' - function not defined KamikadzeStatistics.mqh 261 19
'OrderProfit' - function not defined KamikadzeStatistics.mqh 265 42
MT5でコードを書き換えるのを手伝ってください - 注文は苦手です :(
コンパイル時にエラーが発生する。
'SELECT_BY_POS' - 未宣言の識別子 KamikadzeStatistics.mqh 257 33
'MODE_HISTORY' - 未宣言の識別子 KamikadzeStatistics.mqh 257 47
'OrderSelect' - 誤ったパラメータ数 KamikadzeStatistics.mqh 257 13
'OrderType' -function not defined KamikadzeStatistics.mqh 259 60
'OrderCloseTime' - function not defined KamikadzeStatistics.mqh 261 19
'OrderProfit' - function not defined KamikadzeStatistics.mqh 265 42
これは何でしょう?MQL4が苦手なのですが、必要なものを教えていただければ、すべてMQL5で書けるようになります。
履歴の損益計算と関係があるのでしょうか?