MT4 from all brokers dump everything to C:\UsersMAN@AppDataRoaming@MetaQuotes@Terminal@100......001history@downloads (for each broker and for each their terminal respectively).2つのブローカーで3-4組のMT4を使用すると、25GB、すなわちすべての空きメモリを消費します。また、必要な引用文はテスターのC: \Usersers......\testerhistory にロードされています。
MT4 from all brokers dump everything to C:\UsersMAN@AppDataRoaming@MetaQuotes@Terminal@100......001history@downloads (for each broker and for each their terminal respectively).2つのブローカーで3-4ペアのMT4が25GB、つまり全ての空きメモリを食いました。また、必要な引用文はテスターのC: \Usersers......\testerhistory にロードされています。
アンドロイド用のロボットはないのですか?
メタトレーダーのモバイル版には 自動売買はなく、当分登場することはないでしょう。スマホからロボットを操作する場合は、ロボットのある端末をホストするVPS+スマホでリモートアクセスするためのソフトが必要です。
MT5で通貨ペアの週足チャートを10枚開くと、ターミナルに800メガバイトのティック履歴が 読み込まれます。チャート上ではほとんど変化がないのに、常にロードされているのです。問題は、週足チャートしか使っていないのに、なぜティック履歴が必要なのかということです。ちなみに、MT4では週足チャートは遅延なく瞬時に開く。
これはmt5の特徴で、m1ですべてをロードしてから必要な期間を構築する......。....
というように、毎回、各シンボルに対して
EAのアイデアは、価格が水平レベルまたは手動で引いたトレンドラインに触れたときに売買することです。いろいろな動作するEAとインジケータを組み合わせてEAを作りました。しかし、EAが動作しない。というか、最初のティックでシグナルが出ずにSELLしか開きません。どうしたんですか?
/+------------------------------------------------------------------+
//| |
//| 著作権 © 2010, MetaQuotes Software Corp.
//| http://www.mql4.com/ru/users/rustein |
//+------------------------------------------------------------------+
#define MAGIC 131313 //内向きのチャンネルを開く
//---------------------------------------
extern inttern TF=15;
//+------------------------------------------------------------------+
extern int StopLoss = 300;
//--------------------------------------------
extern double TakeProfit = 3000;
//--------------------------------------
extern int Per_MA= 20;
//---- 定数
#define OP_BUY_ 0
#define OP_SELL_ 1
//-------------------------------------------------------------------+
extern double Lots = 0.1;
extern double MaximumRisk = 1;
extern double DecreaseFactor = 0;
bool b_1=true, s_1=true とする。
//+------------------------------------------------------------------+
///オープンポジションの計算
//+------------------------------------------------------------------+
double MA=iMA(NULL,TF,Per_MA,0,0,1);
int CalculateCurrentOrders(文字列シンボル)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)ブレーク。
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- リターンオーダー数
if(buys>0) return(buys);
else return(-sells);
}
//+------------------------------------------------------------------+
//| 最適なロットサイズを計算する
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=ロット。
int orders=HistoryTotal(); // ヒストリーの受注総額
int losses=0; // ブレークしないロスオーダーの数
//---- ロットサイズを選択する
//lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,2)とする。
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100/MarketInfo(Symbol(),MODE_TICKVALUE)/StopLoss,2)。
//---- 損切り注文の回数を計算する。
if(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }.
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
//----
if(OrderProfit()>0)ブレーク。
if(OrderProfit()<0) losses++;
}
if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,2);
}
//---- ロットサイズを返す
if(lot<0.01) lot=0.01;
return(lot)です。
}
//-------------------------------------------------
/* インジケータからこの部分
int CheckBreakoutLines(int shift)
{
// オブジェクトの総数
int obj_total = ObjectsTotal();
// バーの時間
datetime now = Time[shift];
// 繰り返し
for(int i = obj_total - 1; i >= 0; i--)
{
// オブジェクト名
文字列ラベル = ObjectName(i);
// タイプ
int OType = ObjectType(label)。
bool trendline = false;
bool hline = false;
// 評価する価格
double cprice = 0;
// トレンドライン
if(OType == OBJ_TREND )
{
bool ray = ObjectGet(label, OBJPROP_RAY);
if(!ray)
{
datetime x1 = ObjectGet(label, OBJPROP_TIME1);
datetime x2 = ObjectGet(label, OBJPROP_TIME2);
if(x1 < now && x2 < now) continue;
}
cprice = GetCurrentPriceOfLine(ラベル、シフト);
trendline = true。
}else if(OType == OBJ_HLINE ) {.
cprice = ObjectGet(label, OBJPROP_PRICE1);
hline = true。
}else {
を続ける。
}
// トレンドラインとHラインのブレイクアウトとフォールスブレイクアウト
if(MA>cprice &&Ask<cprice)
{
if(トレンドライン) { return(OP_BUY_); }.else if(hline) { return(OP_BUY_); }.
}else if(MA>cprice &&Ask<cprice) {。
if(トレンドライン) { return(OP_SELL_); }.else if(hline) { return(OP_SELL_); }.
}
}
return(EMPTY_VALUE)とする。
}
double GetCurrentPriceOfLine(文字列ラベル、intシフト)
{
double price1 = ObjectGet(label, OBJPROP_PRICE1);
double price2 = ObjectGet(label, OBJPROP_PRICE2);
datetime d1 = ObjectGet(label, OBJPROP_TIME1);
datetime d2 = ObjectGet(label, OBJPROP_TIME2);
int shiftfrom = iBarShift(Symbol(), 0, d1, false);
int shiftto = iBarShift(Symbol(), 0, d2, false);
int lapse = MathAbs(shiftto - shiftfrom);
int distance = MathAbs(shift - shiftfrom);
double pendiente = (price2 - price1) / lapse;
double cpoint = price1 + (distance * pendiente);
return(cpoint)です。
}
//-------------------------------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| 開注文条件のチェック
//+------------------------------------------------------------------+
void CheckForOpen()
{
int res;
//--------------------------------------------------------------------+
//--------------------------------------------------------------------+
//---- 買付条件
if(OP_BUY_&&b_1)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Ask-(StopLoss*ポイント)、Ask+TakeProfit*ポイント、" VV",MAGIC,0,Green);
b_1=false; s_1=true とする。
を返します。
}
//---- 販売条件
if(OP_SELL_&&s_1)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+(StopLoss*ポイント),Bid-TakeProfit*ポイント," VV",MAGIC,0,Red) です。
s_1=false;b_1=true とする。
を返します。
}
//----
}
//+------------------------------------------------------------------+
//| 機能開始
//+------------------------------------------------------------------+
void start()
{
//---- 履歴と取引を確認する
if(Bars<100 || IsTradeAllowed()==false) return;
//---- 現在のシンボルで未決済注文を計算する
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
}
//+------------------------------------------------------------------+
//|---------------------------// END //------------------------------|
//+------------------------------------------------------------------+
EAのアイデアは、価格が水平レベルまたは手動で引いたトレンドラインに触れたときに売買することです。いろいろな動作するEAとインジケータを組み合わせてEAを作りました。しかし、EAが動作しない。というか、最初のティックでシグナルが出ずにSELLしか開きません。どうしたんですか?
/+------------------------------------------------------------------+
//| |
//| 著作権 © 2010, MetaQuotes Software Corp.
//| http://www.mql4.com/ru/users/rustein |
//+------------------------------------------------------------------+
#define MAGIC 131313 //内向きのチャンネルを開く
//---------------------------------------
extern inttern TF=15;
//+------------------------------------------------------------------+
extern int StopLoss = 300;
//--------------------------------------------
extern double TakeProfit = 3000;
//--------------------------------------
extern int Per_MA= 20;
//---- 定数
#define OP_BUY_ 0
#define OP_SELL_ 1
//---- 履歴と取引を確認する
if(Bars<100 || IsTradeAllowed()==false) return;
//---- 現在のシンボルで未決済注文を計算する
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
}
//+------------------------------------------------------------------+
//|---------------------------// END //------------------------------|
//+------------------------------------------------------------------+
プログラムをメモ帳に読み込み、空白行を削除。一目でカバーできるようになったのです。SRCボタンを押し、貼り付け。ここで出てきたのが1) なぜ、定義する必要があるのか
OP_BUY=0とOP_SELL=1が既にある場合
2)諸悪の根源はこの断片にある。同じ条件(MA>cprice &&Ask<cprice)を2回チェックし、異なる判定を行う。
3) その後、各ブランチがチェックを行うが、結果は同じままである
一般に、上の行は簡略化して次のように書くことができる。
if(trendline)return OP_BUY; if(hline) return OP_BUY; или еще проще if(trendline or hline) return OP_BUY;プログラムをメモ帳に読み込んで、空白行を削除。一目でカバーできるようになったのです。SRCボタンを押し、貼り付け。ここで出てきたのが1) なぜ、定義する必要があるのか
OP_BUY=0とOP_SELL=1が既にある場合
2)諸悪の根源はこの断片にある。同じ条件(MA>cprice &&Ask<cprice)を2回チェックし、異なる判定を行う。
3) その後、各ブランチがチェックを行うが、結果は同じままである
上の行を簡略化して書くと、次のようになります。
ご返答ありがとうございます。しかし、OP_SELL=1なので、やはりSELLしか開きませんね。この条件は常に満たされている。このように書き直しました。
注文が開かなくなった、私の意見では、int CheckBreakoutLines(int shift)が機能しない。
プロフェッショナルの皆様へ。MT4をインストールする前、またはインストールした後に、システムディスク以外のディスクから相場履歴を読み書きできるようにする、またはできないようにするにはどうしたらよいでしょうか。
MT4 from all brokers dump everything to C:\UsersMAN@AppDataRoaming@MetaQuotes@Terminal@100......001history@downloads (for each broker and for each their terminal respectively).2つのブローカーで3-4組のMT4を使用すると、25GB、すなわちすべての空きメモリを消費します。また、必要な引用文はテスターのC: \Usersers......\testerhistory にロードされています。
Windows(7)の再インストールとディスクサイズの再割り当ては考慮しないので、アドバイスをお願いします。もしかして、私のやり方が悪いのか?もし私が見落としていて、すでにどこかで議論されているのであれば、リンクを投げてください...。
ありがとうございました。
プロフェッショナルの皆様へ。MT4をインストールする前、またはインストールした後に、システムディスク以外のディスクから相場履歴を読み書きできるようにする、またはできないようにするにはどうしたらよいですか?
MT4 from all brokers dump everything to C:\UsersMAN@AppDataRoaming@MetaQuotes@Terminal@100......001history@downloads (for each broker and for each their terminal respectively).2つのブローカーで3-4ペアのMT4が25GB、つまり全ての空きメモリを食いました。また、必要な引用文はテスターのC: \Usersers......\testerhistory にロードされています。
Windowsの再インストール(7を使用しています)とディスクサイズの再割り当ては考慮せずに、アドバイスお願いします。もしかして、私のやり方が悪いのか?もし私が見落としていて、すでにどこかで議論されているのであれば、リンクを投げてください...。
ありがとうございました。
ターミナルフォルダ 全体をシステムドライブ以外にコピーし、そのショートカットを作成し、/portable スイッチを書き込むだけです。