privet ya ne programist svyazal nekotorie idei vmesto zakinul sovetnik na reale stal zakrivat vse sdelki drugix sovetnikov vrode bi prisvoil i svoyu magik number .尊敬的女士们、先生们、女士们: 你们好!我是来自美国的J.P.C.,我是来自中国的J.P.C.。
#property copyright "Armen Alaverdyan"#property link "bravolc@mail.ru"externdouble PercentProfit = 0.15; // Процент профитаexterndouble PercentLoss = 100; // Процент убыткаexternbool DeleteOrders = False; // Удалять ордераexternbool CloseTerminal = False; // Закрывать терминалexternbool ShowComment = True; // Показывать комментарийexternint NumberAccount = 0; // Номер торгового счётаexternbool UseSound = False; // Использовать звуковой сигналexternstring NameFileSound = "expert.wav"; // Наименование звукового файлаexternint Slippage = 3; // Проскальзывание ценыexternint NumberOfTry = 5; // Количество попытокexternint PauseAfterError = 75; // Пауза после ошибки в секундахexterndouble maxsimum_Lots=0.3;
externint rsi_period=22;
externdouble MATrendPeriod=26;
externdouble MACDOpenLevel=3;
externdouble MACDCloseLevel=2;
//---- input parametersexterndouble Lots=0.1;
externint StLoss=200;
externint TPrfit=100;
externstring Times="H1";
externint TrailingStop=11;
externint MagicNumber = 15031963;
//------- Глобальные переменные советника --------------------------------------bool gbDisabled = False; // Флаг блокировки советникаcolor clCloseBuy = Blue; // Цвет значка закрытия покупкиcolor clCloseSell = Red; // Цвет значка закрытия продажиcolor clDelete = Yellow; // Цвет значка удаления ордеров//------- Поключение внешних модулей -------------------------------------------#include <stdlib.mqh>#include <WinUser32.mqh>//===================================================================================================externint MaxOrders=100;
externint n=5;//minuta startadouble lava_aper;
double LotsOptimized() {
lava_aper = NormalizeDouble(AccountFreeMargin() * Lots / 10000.0, 1);
if (lava_aper < Lots) lava_aper = Lots;
if (lava_aper > maxsimum_Lots) lava_aper = Lots;{
return (lava_aper);
}
}
Print("Свободная маржа счета = ",AccountFreeMargin());
Print("Баланс счета = ",AccountBalance());
Print(" Средства = ",AccountEquity());
int Tick;
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(TrailingStop>0 && Bid-OrderOpenPrice()>Point*TrailingStop && (OrderStopLoss()<Bid-Point*TrailingStop|| OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),
Bid-Point*TrailingStop,OrderTakeProfit(),0);
}
}
if(OrderType()==OP_SELL)
{
if(TrailingStop>0 && OrderOpenPrice()-Ask>Point*TrailingStop && (OrderStopLoss()>Ask+Point*TrailingStop || OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),
Ask+Point*TrailingStop,OrderTakeProfit(),0);
}
}
}
}
Comment("lava_aper= ",lava_aper,
"TrailingStop= ",TrailingStop,"StopLoss= ",StLoss,
"TakeProfit= ",TPrfit,
" Средства = ",AccountEquity(),
"AccountBalance()= ",AccountBalance(),
"AccountFreeMargin()= ",AccountFreeMargin() );
double bull=0,bear=0;
bull = iBullsPower(NULL,0,5,PRICE_CLOSE,1);
bear = iBearsPower(NULL,0,5,PRICE_CLOSE,1);
// Comment("bull+bear= ",bull + bear,"\n I Blue "); double SignalPrevious, MaCurrent, MaPrevious;
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
double MacdCurrent, MacdPrevious, SignalCurrent;
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
double rsi17_0 = NormalizeDouble(iRSI(Symbol(),PERIOD_H1, rsi_period, 0, 0), Digits);
double rsi17_1 = NormalizeDouble(iRSI(Symbol(),PERIOD_H1, rsi_period, 3, 3), Digits);
if (Minute() == n
&& (iDeMarker(NULL,0,14,2)<0.49)
&&(iDeMarker(NULL,0,14,0)>0.49)
//&& rsi17_1<rsi17_0//&& Open[1] < Close[1]
&& Tick == 0//&& (bull + bear > 0)
&& MacdCurrent<0//&& MacdCurrent>SignalCurrent //&& MacdPrevious<SignalPrevious //&& MathAbs(MacdCurrent)>(MACDOpenLevel*Point)//&& MaCurrent>MaPrevious
)
{
OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,0,Ask - StLoss*Point,Ask + TPrfit*Point,"",MagicNumber,0,CLR_NONE);
Tick++;
return(0);
}
if (Minute() == n
&& (iDeMarker(NULL,0,14,2)>0.51)
&&(iDeMarker(NULL,0,14,0)<0.51)
//&& (bull + bear < 0) //&& rsi17_1>rsi17_0//&& Open[1] > Close[1]
&& Tick == 0
&& MacdCurrent>0//&& MacdCurrent<SignalCurrent //&& MacdPrevious>SignalPrevious //&& MathAbs(MacdCurrent)>(MACDOpenLevel*Point)//&& MaCurrent<MaPrevious
)
{
OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,0,Bid + StLoss*Point,Bid - TPrfit*Point,"",MagicNumber,0,CLR_NONE);
Tick++;
return(0);
}
if (OrdersTotal() <= MaxOrders) { //1//----if (Minute() == 59)
{
Tick = 0;
}
}
if (AccountEquity()>=AccountBalance()*(1+PercentProfit/100)
|| AccountEquity()<=AccountBalance()*(1-PercentLoss /100)) {
ClosePosFirstProfit();
DeleteOrders();
}
}
//+----------------------------------------------------------------------------+//| |//| ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ |//| |//+----------------------------------------------------------------------------+//| Закрытие одной предварительно выбранной позиции |//+----------------------------------------------------------------------------+void ClosePosBySelect() {
bool fc;
color clClose;
double ll, pAsk, pBid, pp;
int err, it;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
pBid=MarketInfo(OrderSymbol(), MODE_BID);
if (OrderType()==OP_BUY) {
pp=pBid; clClose=clCloseBuy;
} else {
pp=pAsk; clClose=clCloseSell;
}
ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if (fc) {
if (UseSound) PlaySound(NameFileSound); break;
} else {
err=GetLastError();
if (err==146) while (IsTradeContextBusy()) Sleep(1000*PauseAfterError);
Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
ErrorDescription(err),", try ",it);
Print(OrderTicket()," Ask=",pAsk," Bid=",pBid," pp=",pp);
Print("sy=",OrderSymbol()," ll=",ll," sl=",OrderStopLoss(),
" tp=",OrderTakeProfit()," mn=",OrderMagicNumber());
Sleep(1000*PauseAfterError);
}
}
} elsePrint("Некорректная торговая операция. Close ",GetNameOP(OrderType()));
}
//+----------------------------------------------------------------------------+//| Закрытие позиций по рыночной цене сначала прибыльных |//+----------------------------------------------------------------------------+void ClosePosFirstProfit() {
int i, k=OrdersTotal();
// Сначала закрываем прибыльные позицииfor (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (OrderProfit()+OrderSwap()>0) ClosePosBySelect();
}
}
}
// Потом все остальные
k=OrdersTotal();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) ClosePosBySelect();
}
}
if (CloseTerminal && !ExistPositions()) CloseTerminal();
}
//+----------------------------------------------------------------------------+//| Закрывает торговый терминал. |//+----------------------------------------------------------------------------+void CloseTerminal() {
Print("Сработала функция CloseTerminal()");
int hwnd=WindowHandle(Symbol(), Period());
int hwnd_parent=0;
while(!IsStopped()) {
// hwnd=GetParent(hwnd);if (hwnd==0) break;
hwnd_parent=hwnd;
}
if (hwnd_parent!=0) PostMessageA(hwnd_parent, WM_CLOSE, 0, 0);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.11.2006 |//| Описание : Удаление ордеров |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любой ордер) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+void DeleteOrders(string sy="", int op=-1, int mn=-1) {
bool fd;
int err, i, it, k=OrdersTotal(), ot;
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot>1 && ot<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
fd=OrderDelete(OrderTicket(), clDelete);
if (fd) {
if (UseSound) PlaySound(NameFileSound); break;
} else {
err=GetLastError();
Print("Error(",err,") delete order ",GetNameOP(ot),": ",ErrorDescription(err),", try ",it);
Sleep(1000*5);
}
}
}
}
}
}
}
}
//+----------------------------------------------------------------------------+//| Возвращает флаг существования позиций |//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool ExistPositions(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal();
if (StringLen(sy)==1 && StringGetChar(sy, 0)==48) sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) return(True);
}
}
}
}
}
return(False);
}
//+----------------------------------------------------------------------------+//| Возвращает наименование операции |//+----------------------------------------------------------------------------+string GetNameOP(int op) {
switch (op) {
case OP_BUY : return("Buy");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("Buy Limit");
case OP_SELLLIMIT: return("Sell Limit");
case OP_BUYSTOP : return("Buy Stop");
case OP_SELLSTOP : return("Sell Stop");
default : return("Unknown Operation");
}
//}//+----------------------------------------------------------------------------+//| Вывод сообщения в коммент и в журнал |//+----------------------------------------------------------------------------+//void Message(string m) {// Comment(m);// if (StringLen(m)>0) Print(m);//}return(0);
}//0//+------------------------------------------------------------------+//+------------------------------------------------------------------+
privet ya ne programist svyazal nekotorie idei vmesto zakinul sovetnik na reale stal zakrivat vse sdelki drugix sovetnikov vrode bi prisvoil i svoyu magik number .尊敬的女士们、先生们、女士们: 你们好!我是来自美国的J.P.C.,我是来自中国的J.P.C.。
请帮助,我需要一个能够改变SL和TP以及指标参数(随机指数)和过滤器(MA)的EA--信号是买入穿越快线缓慢上升,卖出下降。交易是沿着MA的方向进行的!我明白,这个EA并不复杂,也不是很有趣,但回顾数据库中所有的Advisor都没有发现类似的情况!所以,我认为这个EA并不复杂。我试着自己写--它空了3天((!)
下午好,我想请编码员删除顾问中的交易方法(有5件)。同时删除获利,他把它们只是削减利润!(提前感谢!)。
来吧!)
下午好。有谁能运行像图中所示的软件算法?我正在用我的手试探它。但坐在显示器前是很乏味的。我希望能实现一点自动化。我想实现自动开仓。我想用另一个盈利项目来关闭它们。
我请求您的帮助,我没有成功,它向一个方向打开了一大堆,甚至跳过。我必须长期研究MQL,我必须了解什么是什么。这就是为什么我请求你的帮助。
这里似乎很清楚。如果在1.4125的卖出止损 被打开,把买入止损放在1.4135,乘以LotUp的手数,以此类推,直到其他程序关闭一切。
谢尔盖说。
我将免费写一份顾问,但一次写一份,谁需要就发邮件给谁http://forum.fortrader.ru/index.php?board=3.0
privet ya ne programist svyazal nekotorie idei vmesto zakinul sovetnik na reale stal zakrivat vse sdelki drugix sovetnikov vrode bi prisvoil i svoyu magik number .尊敬的女士们、先生们、女士们: 你们好!我是来自美国的J.P.C.,我是来自中国的J.P.C.。
privet ya ne programist svyazal nekotorie idei vmesto zakinul sovetnik na reale stal zakrivat vse sdelki drugix sovetnikov vrode bi prisvoil i svoyu magik number .尊敬的女士们、先生们、女士们: 你们好!我是来自美国的J.P.C.,我是来自中国的J.P.C.。
私营部门:"我们 "是 "我们 "的意思,"我们 "是 "我们 "的意思,"我们 "是 "我们 "的意思。