#include <b-Positions#.mqh> // Библиотека функций для работы с позициями #include <b-KimIV#.mqh> // Библиотека дополнительных функций#include <b-Orders#.mqh> // Библиотека функций для работы с ордерами#include <stdlib.mqh> // Стандартная библиотека#include <WinUser32.mqh> // Стандартная библиотека
これで、すべてのライブラリのすべての関数が利用可能になり、コンパイル時のエラーや犯罪メッセージも、通常の「is not referenced...」以外、一切発生しなくなりました。
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 12.08.2008 |//| Описание : Возвращает номер недели месяца по дате |//+----------------------------------------------------------------------------+//| Параметры: |//| dt - дата, время (0 - сейчас по времени торгового сервера) |//+----------------------------------------------------------------------------+int WeekOfMonth(datetime dt=0){if( dt<=0) dt=TimeCurrent();datetime d;int i, kd=TimeDay( dt), nn=1;for( i=2; i<= kd; i++){
d=StrToTime(TimeYear( dt)+"."+TimeMonth( dt)+"."+ i);if(TimeDayOfWeek( d)==1) nn++;}return( nn);}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 11.12.2008 |//| Описание : Закрытие позиций в порядке сортировки по размерам лотов. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//| sd - Направление сортировки лотов (MODE_ASCEND - возрастание, |//| MODE_DESCEND - убывание) |//+----------------------------------------------------------------------------+void ClosePosBySortLots(string sy="",int op=-1,int mn=-1,int sd= MODE_DESCEND){double a[][2];// Массив лотов и тикетовint i, k=OrdersTotal();// Счётчик и количество ордеровint p=0;// Количество позицийif( sy=="0") sy=Symbol();for( i=0; i< k; i++){if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)){if((OrderSymbol()== sy || sy=="")&&( op<0||OrderType()== op)){if(OrderType()==OP_BUY||OrderType()==OP_SELL){if( mn<0||OrderMagicNumber()== mn){
p++;ArrayResize( a, p);
a[ p-1][0]=OrderLots();
a[ p-1][1]=OrderTicket();}}}}}// вдруг позиций нету, тогда и закрывать нечегоif( p>0){ArraySort( a,WHOLE_ARRAY,0, sd);for( i=0; i< p; i++){if(OrderSelect( a[ i][1], SELECT_BY_TICKET)){// проверим незакрытость на всякий случай,// может какая-то позиция уже закрылась по стопу/тейкуif(OrderCloseTime()==0) ClosePosBySelect();}}}}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Добавляет к строке S столько лидирующих нулей "0", |//| : чтобы длина строки S стала равна K. |//+----------------------------------------------------------------------------+//| Параметры: |//| s - строка |//| k - длина строки S |//+----------------------------------------------------------------------------+string AddLeadingZero(string s,int k){while(StringLen( s)< k) s=StringConcatenate("0", s);return( s);}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Преобразует два/три целых числа в строку в формате времени |//+----------------------------------------------------------------------------+//| Параметры: |//| h - часы |//| m - минуты |//| s - секунды (0 - не использовать) |//+----------------------------------------------------------------------------+string toTime(int h=0,int m=0,int s=0){string st="";if( h==0) st="00:";else st=StringConcatenate( AddLeadingZero( h,2),":");if( m==0) st=StringConcatenate( st,"00");else st=StringConcatenate( st, AddLeadingZero( m,2));if( s!=0) st=StringConcatenate( st,":", AddLeadingZero( s,2));return( st);}
イゴールさん、返信ありがとうございます!わかりました。御社の機能は単体でも使っていますが、EAを開発する段階でライブラリを活用したいと思いました。
komposterさんの trade_lib&info_lib ライブラリがどのように作られているかを見て、自分用にあなたのものを少し変更しました。
1.すべてのライブラリで#property libraryと #include libraryのクロスリンクを削除し、混同しないようにライブラリ名を変更しました。
2.すべてのライブラリを直接呼び出すブロックを作りました。
これで、すべてのライブラリのすべての関数が利用可能になり、コンパイル時のエラーや犯罪メッセージも、通常の「is not referenced...」以外、一切発生しなくなりました。
全ての外部 EAが使用可能であり、問題はない。
もっと書けば、つながる、使える。まず、トータルプロフィットによるトレーリング機能が欲しいです。
WeekOfMonth()関数を使用します。
この関数は、その月の週を日付別に返します。オプションのパラメータを1つだけ受け付けます。
SZYさん、WeekOfMonth()関数をテストするスクリプトを添付します。
イゴールさん、こんにちは!便利な機能、どうもありがとうございます!どんどん使わせていただきます!私も最近始めたばかりなので、質問なのですが...。もうずいぶん前から使っているので。OpenPositionという関数を使っているのですが、もしかしたらエラーか何かに反応しているのでしょうか? 昨日のログです、それ以前は全て順調でしたエラー220が 見つからない...................。
07:47:28 MetaTrader 4.00 build 220 起動(MetaQuotes Software Corp.)
07:47:28 Expert open prob USDJPY EURUSD,M1: ロード成功
07:47:32 '1262868': ログイン
07:47:44 '1262868': ログイン
07:49:40 '1262868': ログイン
07:49:46 '1262868': ログイン
07:54:44 '1262868': Connect failed [No connection]
11:38:16 Expert open prob USDJPY EURUSD,M1: 削除
11:38:18 MetaTrader 4.00 build 220 stopped
14:05:05 MetaTrader 4.00 build 220 started (MetaQuotes Software Corp.))
14:05:05 Expert open prob USDJPY EURUSD,M1: loaded successfully
14:05:10 '1262868': login
14:05:31 '1262868': login
14:06:39 '1262868': login
14:06:46 '1262868': login
15:57:06 '1262868': connect failed [No connection]
18:30:46 Expert open prob USDJPY EURUSD,M5.M1: ロードに成功しました。removed
18:30:49 Main pumping: timeout on stop
18:30:52 Main pumping: timeout on stop
18:30:55 Main pumping: timeout on stop
18:30:58 Main pumping: timeout on stop
18:31:01 Main pumping: timeout on stop
18:31:01 Main pumping: terminated
18:31:02 MetaTrader4.NETは、MetaTrader4.00 build 220 stopped
18:31:02 MetaTrader 4.00 build 220 stopped because system shutdown
18:47:57 MetaTrader 4.00 build 220 started (MetaQuotes Software Corp.).)
18:47:58 Expert open prob USDJPY EURUSD,M5: loaded successfully
18:48:01 '1262868': connect failed [No connection]
18:48:10 '1262868': login
18:48:20 '1262868': login
20:19:00 '1262868': login
20:19:07 '1262868': login
20:20:05 '1262868': login
20:20です。13 '1262868': ログイン
20:59:29 '1262868': ログイン
20:59:39 '1262868': ログイン
21:02:16 '1262868': ログイン
21:02:41 '1262868': DataCenter connecting failed [6]
22:08:40 '1262868': Ping failed
22:08:43 '1262868': ログイン
22:08:49 '1262868': DataCenter connecting failed [6]
22:1001 '1262868': login
22:10:05 '1262868': DataCenter connecting failed [6]
22:14:59 '1262868': login
22:15:13 '1262868': login
22:15:22 '1262868': DataCenter connecting failed [6]
22:37:16 '1262868': login
22:37:27 '1262868': DataCenter connecting failed [6]
22:4051 '1262868': login
22:41:04 '1262868': DataCenter connecting failed [6]
23:17:14 Expert open prob USDJPY EURUSD,M5: removed
23:17:16 Expert open prob USDJPY EURUSD,M5: loaded successfully
23:25:52 Expert open prob USDJPY EURUSD,M5: removed
23:25:55 MetaTrader 4.NetCenter.00 build 220 stopped
23:25:59 MetaTrader 4.00 build 220 started (MetaQuotes Software Corp.))
23:26:05 '1262868': ログイン
23:26:05 Expert open prob USDJPY EURUSD,M5: ロード成功
23:26:15 '1262868': ログイン
23:27:19 '1262868': ログイン
23:27:34 '1262868': ログイン
23:28:20 Expert open prob USDJPY EURUSD,M5: 削除
23:28:25 Expert open pro USDJPY USDCHF,H4: ロード成功
23:28:33 Expert open pro USDJPY USDCHF,H4: 削除
ありがとうございました。
イゴール、ロットの大きいものから順に全ポジションをクローズする機能はないのでしょうか?
は...書いた...。
ClosePosBySortLots()関数です。
ロットサイズ順にポジションをクローズする機能です。つまり、この機能を使えば、ロット数の昇順または降順でポジションを決済することができます。関数ClosePosBySortLots() は、以下のオプションパラメータを受け付けます。
SZY. ClosePosBySortLots()関数をテストするスクリプトを添付しています。
AddLeadingZero()関数です。
この関数は、文字列の長さがある値に等しくなるように、先頭(左)のゼロ "0" をいくつでも追加します。AddLeadingZero() 関数は、以下の必須パラメータを受け付ける。
SZU. AddLeadingZero()関数をテストするスクリプトを添付しています。
toTime()関数を使用します。
この関数は,2つ/3つの整数を時刻形式の文字列に変換する。この関数に2つの数値が渡された場合、最初の数値が時間として、2番目の数値が分として使用されます。フォーマット文字列は "HH:MM "が返される。数字が3つある場合、3つ目の数字は秒に置き換えられ、この関数は「HH:MM:SS」文字列を返します。toTime() 関数には、以下のオプションパラメータを指定することができる。
ZS. toTime()関数をテストするスクリプトを添付します。
イゴール、価格が変数の1つ、例えばb=1.2400, s=1.2300に一致したときに対応するシグナルを出すような関数を提案してもらえませんか。
b=価格の場合 sig=1、s=価格の場合 sig=-1。
ずさんな内容で申し訳ありません)。
すみません、私はイゴールではありません。でも、もしかしたらこれが役に立つかもしれない。
私も謝ります。>>より正確です。
...スレッドを乱立させないよう、今夜までに自分の投稿を削除します...。
必要ない。見てもらうと、正確な価格値が一貫してつかめないということに目が覚めるでしょう。