//+----------------------------------------------------------------------------+ //| i-TotalStopCurrency.mq4 | //| 21.12.2011 Indicator of the Total Stop in the Deposit Currency. | //| Индикатор суммарного стопа в валюте депозита. | //| 04.05.2012 Добавил способ расчета прибыли для Futures. | //+----------------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers0
//------- Внешние параметры индикатора ----------------------------------------+ externstring symbol = ""; externcolor ecText = Black; // Цвет текста externint eiCorner = 3; // Номер угла привязки: // 0 - левый верхний // 1 - правый верхний // 2 - левый нижний // 3 - правый нижний
よし、ここでも同じサイクルだ、なぜ注文が閉まるのだろう)
なぜなら、それが可能だからです。でも、やっぱり無教養なんです。
知的に提案する!知識を惜しまないなら
以下は、まだ改善の余地がある、少し正しいバージョンです。
for(i=OrdersTotal()-1;i>=0;i--)
{//+----------------------------------------------------------------------------------------+for
if(!OrderSelect(i,SELECT_BY_POS)) continue;
if(OrderSymbol()!=Symbol())continue;
if(OrderType()>1)continue;
RefreshRates();
if(!OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3))
{
error=_LastError;
Print("Error #",error);
}
if(error==6){Alert("Нет связи");return(0);}
if(error==132){Alert("Рынок закрыт");return(0);}
}
//| i-TotalStopCurrency.mq4 |
//| 21.12.2011 Indicator of the Total Stop in the Deposit Currency. |
//| Индикатор суммарного стопа в валюте депозита. |
//| 04.05.2012 Добавил способ расчета прибыли для Futures. |
//+----------------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 0
//------- Внешние параметры индикатора ----------------------------------------+
extern string symbol = "";
extern color ecText = Black; // Цвет текста
extern int eiCorner = 3; // Номер угла привязки:
// 0 - левый верхний
// 1 - правый верхний
// 2 - левый нижний
// 3 - правый нижний
//------- Глобальные переменные индикатора ------------------------------------+
//+----------------------------------------------------------------------------+
//| |
//| ПРЕДОПРЕДЕЛЁННЫЕ ФУНКЦИИ |
//| |
//+----------------------------------------------------------------------------+
//| Custom indicator initialization function |
//+----------------------------------------------------------------------------+
void init() {
Comment("");
}
//+----------------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+----------------------------------------------------------------------------+
void deinit() {
Comment("");
for (int i=0; i<3; i++) ObjectDelete("iTotalStopCurrency"+i);
}
//+----------------------------------------------------------------------------+
//| Custom indicator iteration function |
//+----------------------------------------------------------------------------+
void start() {
double s=ProfitIFStopInCurrency(symbol);
int pn=ProfitIFStopInCurrency2(symbol);
SetLabel("iTotalStopCurrency0", "Уровень стопа", ecText, 5, 30, eiCorner);
SetLabel("iTotalStopCurrency1", DoubleToStr(s, 2)+" "+AccountCurrency(), ecText, 5, 5, eiCorner);
SetLabel("iTotalStopCurrency2", "Спр="+DoubleToStr(MarketInfo(Symbol(),MODE_SPREAD),0)+" Орд="+OrdersTotal()
+" Приб=" +DoubleToStr(AccountProfit(),2)+" Сред="+DoubleToStr(AccountEquity(),2)+" Бал="+DoubleToStr(AccountBalance(),2)+" "+pn
+"пипс "+DoubleToStr(s/AccountBalance()*100, 2)+"%", ecText, 130, 5, eiCorner);
}
//+----------------------------------------------------------------------------+
//| Версия : 03.05.2012 |
//| Описание : Возвращает предполагаемую прибыль/убыток в валюте депозита |
//| в случае срабатывания стопа открытых позиций. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ( "" - любой символ, |
//| NULL - текущий символ) |
//| op - операция ( -1 - любая позиция) |
//| mn - MagicNumber ( -1 - любой магик) |
//+----------------------------------------------------------------------------+
double ProfitIFStopInCurrency(string sy="", int op=-1, int mn=-1) {
/*if (sy=="0") */ sy=Symbol(); // Текущий символ
int i, k=OrdersTotal(); // Подсчёт открытых позиций
int m; // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
double l; // Размер контракта в базовой валюте инструмента
double p; // Размер пункта в валюте котировки
double t; // Минимальный шаг изменения цены инструмента в валюте котировки
double v; // Размер минимального изменения цены инструмента в валюте депозита
double s=0; // Подсчёт стопа в валюте депозита
double pn=0; // Подсчёт стопа в пунктах
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op)) {
l=MarketInfo(OrderSymbol(), MODE_LOTSIZE);
m=MarketInfo(OrderSymbol(), MODE_PROFITCALCMODE);
p=MarketInfo(OrderSymbol(), MODE_POINT);
t=MarketInfo(OrderSymbol(), MODE_TICKSIZE);
v=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
if (OrderType()==OP_BUY) {
if (m==0) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots(); pn-=(OrderOpenPrice()-OrderStopLoss())*MathPow(10,MarketInfo(OrderSymbol(),MODE_DIGITS));
if (m==1) s-=(OrderOpenPrice()-OrderStopLoss())/p*v/t/l*OrderLots();
if (m==2) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots();
s+=OrderCommission()+OrderSwap();
}
if (OrderType()==OP_SELL) {
if (OrderStopLoss()>0) {
if (m==0) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots(); pn-=(OrderStopLoss()-OrderOpenPrice())*MathPow(10,MarketInfo(OrderSymbol(),MODE_DIGITS));
if (m==1) s-=(OrderStopLoss()-OrderOpenPrice())/p*v/t/l*OrderLots();
if (m==2) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots();
s+=OrderCommission()+OrderSwap();
} else s=-AccountBalance();
}
}
}
}
}
if (AccountBalance()+s<0) s=-AccountBalance(); // Ограничение убытка балансом счёта
return(s);
}
//+----------------------------------------------------------------------------+
double ProfitIFStopInCurrency2(string sy="", int op=-1, int mn=-1) {
/*if (sy=="0") */ sy=Symbol(); // Текущий символ
int i, k=OrdersTotal(); // Подсчёт открытых позиций
int m; // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
double l; // Размер контракта в базовой валюте инструмента
double p; // Размер пункта в валюте котировки
double t; // Минимальный шаг изменения цены инструмента в валюте котировки
double v; // Размер минимального изменения цены инструмента в валюте депозита
double s=0; // Подсчёт стопа в валюте депозита
double pn=0; // Подсчёт стопа в пунктах
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op)) {
l=MarketInfo(OrderSymbol(), MODE_LOTSIZE);
m=MarketInfo(OrderSymbol(), MODE_PROFITCALCMODE);
p=MarketInfo(OrderSymbol(), MODE_POINT);
t=MarketInfo(OrderSymbol(), MODE_TICKSIZE);
v=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
if (OrderType()==OP_BUY) {
if (m==0) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots(); pn-=(OrderOpenPrice()-OrderStopLoss())*MathPow(10,MarketInfo(OrderSymbol(),MODE_DIGITS));
if (m==1) s-=(OrderOpenPrice()-OrderStopLoss())/p*v/t/l*OrderLots();
if (m==2) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots();
s+=OrderCommission()+OrderSwap();
}
if (OrderType()==OP_SELL) {
if (OrderStopLoss()>0) {
if (m==0) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots(); pn-=(OrderStopLoss()-OrderOpenPrice())*MathPow(10,MarketInfo(OrderSymbol(),MODE_DIGITS));
if (m==1) s-=(OrderStopLoss()-OrderOpenPrice())/p*v/t/l*OrderLots();
if (m==2) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots();
s+=OrderCommission()+OrderSwap();
} else s=-AccountBalance();
}
}
}
}
}
if (AccountBalance()+s<0) s=-AccountBalance(); // Ограничение убытка балансом счёта
return(pn);
}
//+----------------------------------------------------------------------------+
//| Версия : 12.10.2007 |
//| Описание : Установка текстовой метки, объект OBJ_LABEL. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| nm - наименование объекта |
//| tx - текст |
//| cl - цвет метки |
//| xd - координата X в пикселах |
//| yd - координата Y в пикселах |
//| cr - номер угла привязки (0 - левый верхний ) |
//| 1 - правый верхний |
//| 2 - левый нижний |
//| 3 - правый нижний ) |
//| fs - размер шрифта (9 - по умолчанию ) |
//+----------------------------------------------------------------------------+
void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=14) {
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
ObjectSetText(nm, tx, fs);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_XDISTANCE, xd);
ObjectSet(nm, OBJPROP_YDISTANCE, yd);
ObjectSet(nm, OBJPROP_CORNER , cr);
ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
//+----------------------------------------------------------------------------+
こんにちは。
与えられたインジケータをチャートに貼り付けると正常に動作します。
しかし、ターミナルを再起動すると、データがなく、データの代わりに何かが表示されている
TFを変更すれば直る
いろいろ試してみたが、うまくいかない。
テキストラベルの設定が何か間違っているような気がします。
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
ObjectSetText(nm, tx, fs);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_XDISTANCE, xd);
ObjectSet(nm, OBJPROP_YDISTANCE, yd);
ObjectSet(nm, OBJPROP_CORNER , cr);
ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
//+----------------------------------------------------------------------------+
こんにちは。
与えられたインジケータをチャートに貼り付けると正常に動作します。
しかし、ターミナルを再起動すると、データがなく、データの代わりに何かが表示されている
TFを変更すれば直る
いろいろ試してみたが、うまくいかない。
テキストラベルの設定が何か間違っているような気がします。
そうかもしれませんね?
if (ObjectFind(nm)<0) {
ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_XDISTANCE, xd);
ObjectSet(nm, OBJPROP_YDISTANCE, yd);
ObjectSet(nm, OBJPROP_CORNER , cr);
ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
ObjectSetText(nm, tx, fs);
}
これはどうでしょう?
if (ObjectFind(nm)<0) {
ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_XDISTANCE, xd);
ObjectSet(nm, OBJPROP_YDISTANCE, yd);
ObjectSet(nm, OBJPROP_CORNER , cr);
ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
ObjectSetText(nm, tx, fs);
}
ご指摘ありがとうございます。
3rdがない、2ndがない。
TF交換後、正常に動作するようになりました
午後パソコンにMT4をインストールしました。わざとDドライブに置く。しかし、頑なにCドライブにデータフォルダを 作成します。そこのスペースが例によって足りないので、1日に何度もテストするときはテスターのログをクリーニングする必要があるんです。まあ、致命的なことはないでしょう?MT4で「data directory」フォルダを別のドライブに作成する方法をド素人にアドバイスしていただけませんか?設定]の中に見当たらないのですが。
私はプロではありませんが、SIMにできることは何もないと思います。
cドライブを空けるか、ワインドアップで全部再インストールして、もっとやれ !
こんにちは。パソコンにMT4をインストールしました。目的に合わせてDドライブに入れる。しかし、頑なにCドライブにデータフォルダを 作成します。そこのスペースが例によって足りないので、テスト中は1日に何度もテスターのログを掃除することになるんです。まあ、致命的なことはないでしょう?MT4で「data directory」フォルダを別のドライブに作成する方法をド素人にアドバイスしていただけませんか?設定]の中に見当たらないのですが。