Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
ИСПРАВЬТЕ ДОБАВЬТЕ ПОЖАЛУЙСТА А ТО Я ТОРМОЗ
Алгоритм простой- получили сигнал на покупку(продажу) выставляем ордер на покупку и один отложенный на продажу ниже на 250 пунктов.
если ордер закрылся(профит) то отложенный ордер тоже закрывается. Если закрылся с минусом отложенный все равно снимается. если сработал отложенный ничего не делается пока он не выйдет по профит или стоп.
КОД
//+------------------------------------------------------------------+
//| #_.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "."
#property link "t"
extern int TakeProfit = 1000; // Уровень тейкпрофит в пунктах
extern int StopLoss = 250; // уровень стоплосс в пунктах
extern double k = 0.0;
extern int ma_period = 8;
extern double lot = 0.1;
int magic=1234;
int ticket;
bool cantrade=true;
double price;
//bool plan=true;
double MarginStart =0;
double MarginPost =0;
extern int d = 13;
extern int d1 = 34;
extern int d2 = 101;
extern int d3 = 13;
double sl;
double tp;
int OpenLong(double volume=0.1)
{
int slippage=21;
string comment="20/200 expert (Long)";
color arrow_color=Red;
ticket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,Ask-StopLoss*Point,
Ask+TakeProfit*Point,comment,magic,0,arrow_color);
//OrderSend(Symbol(), OP_BUY, lot, Ask, 3, sl, tp, "", 0, 0, Blue);
//OrderSend(Symbol(), OP_BUY, 0.3, Ask, 3,Ask-100*Point, Ask+30*Point, "", 0, 0, Blue);
//Выставляем ордер ниже на 250 пунктов в обратную сторону
OrderSend(Symbol(), OP_SELLSTOP, 1,NormalizeDouble((Bid-250*Point),Digits), 3, NormalizeDouble(((Bid-250*Point)+100*Point),Digits),NormalizeDouble(((Bid-250*Point)-30*Point),Digits), "", 0, 0, Red);
// OrderSend(Symbol(),OP_SELLLIMIT,Lot,Bid-250*Point,3,Ask-250*Point+100*Point,Ask-250*Point-30*Point,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
Print("Buy order opened : ",OrderOpenPrice());
return(0);
}
}
else
{
Print("Error opening Buy order : ",GetLastError());
return(-1);
}
}
int OpenShort(double volume=0.1)
{
int slippage=10;
string comment="200 expert (Short)";
color arrow_color=Red;
ticket=OrderSend(Symbol(),OP_SELL,volume,Bid,slippage,Bid+StopLoss*Point,
Bid-TakeProfit*Point,comment,magic,0,arrow_color);
//OrderSend(Symbol(), OP_SELL, lot, Bid, 3, sl, tp, "", 0, 0, Red);
//OrderSend(Symbol(), OP_SELL, 0.3, Bid, 3, Bid+100*Point,Bid-30*Point, "", 0, 0, Red);
OrderSend(Symbol(),OP_BUYSTOP,1,NormalizeDouble((Ask+250*Point),Digits),3,NormalizeDouble(((Ask+250*Point)-250*Point),Digits),NormalizeDouble(((Ask+250*Point)+30*Point),Digits), "", 0, 0, Blue);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
Print("Sell order opened : ",OrderOpenPrice());
return(0);
}
}
else
{
Print("Error opening Sell order : ",GetLastError());
return(-1);
}
}
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
// double mah = iMA(Symbol(), PERIOD_H4, ma_period, 0, MODE_LWMA, PRICE_HIGH, 1);
double ma = iMA(Symbol(), PERIOD_D1, ma_period, 0, MODE_LWMA, PRICE_LOW, 1);
double randomValue=iCustom(NULL,0,"bz",0,d);
double randomValue1=iCustom(NULL,0,"bq",0,d1);
double randomValue2=iCustom(NULL,0,"bq",0,d2);
double randomValue3=iCustom(NULL,0,"bq",0,d3);
MarginStart=AccountBalance();
// {
Comment("TRUE!!");
if(OrdersTotal()== 0) cantrade=true;
if((randomValue>k && randomValue1>k)&&( Close[1] < ma && Low [0] < ma ))
{
Comment("Coef ",randomValue, randomValue1," UP!!!");
if(OrdersTotal()<1)
{
if(AccountFreeMarginCheck(Symbol(),OP_SELL,lot)<=0 || GetLastError()==134)
{
Print("Not enough money");
return(0);
}
if (cantrade==true)
{
MarginStart=AccountBalance();
OpenLong(lot);
cantrade=false; //запрещаем торговать повторно до следующего бара
return(0);
}
}
else
Comment("Coef ",randomValue2, randomValue," !!!");
if((randomValue2<k && randomValue>k) ||(randomValue3>k && randomValue>k))
{
while (OrdersTotal()>0)
{
if (OrderType()==OP_BUY) break;
// выделим первую позицию или ордер в списке
if (!OrderSelect(0, SELECT_BY_POS)) break;
//если закрывается ордер селл то закрывается и отложенный ордер бай
// А ЭТО НЕ РАБОТАЕТ
if ((OrderType()==OP_SELL)&& (OrderType()==OP_BUYLIMIT))
price = MarketInfo(OrderSymbol(), MODE_ASK);
else
price = MarketInfo(OrderSymbol(), MODE_BID);
if (!OrderClose(OrderTicket(), OrderLots(), price, 3))
{
Print("Ошибка ", GetLastError()," при закрытии позиции ", OrderTicket());
Sleep(10000);
RefreshRates();
break;
}
else Sleep(1000);
MarginPost=AccountBalance();
if (MarginPost<MarginStart)
{
lot=0.1;
}
else
if (lot > 0.3)
{
lot=0.3;
}
else
lot=lot+0.1;
cantrade=true;
}
}
}
if((randomValue<k&& randomValue1<k)&&( Close[1] > ma && High[0] > ma ))
{
if(OrdersTotal()<1)
{
if(AccountFreeMarginCheck(Symbol(),OP_SELL,lot)<=0 || GetLastError()==134)
{
Print("Not enough money");
return(0);
}
if (cantrade==true)
{
MarginStart=AccountBalance();
OpenShort(lot);
cantrade=false; //запрещаем торговать повторно до следующего бара
return(0);
}
}
else
if((randomValue2>k && randomValue<k)||(randomValue3 > k && randomValue>k))
{
while (OrdersTotal()>0)
{
if (OrderType()==OP_SELL) break;
// выделим первую позицию или ордер в списке
if (!OrderSelect(0, SELECT_BY_POS)) break;
//если закрывается ордер бай то закрывается и отложенный ордер селл
// А ЭТО НЕ РАБОТАЕТ
if ((OrderType()==OP_BUY)&&(OrderType()==OP_SELLLIMIT))
price = MarketInfo(OrderSymbol(), MODE_BID);
else
price = MarketInfo(OrderSymbol(), MODE_ASK);
if (!OrderClose(OrderTicket(), OrderLots(), price, 3))
{
Print("Ошибка ", GetLastError()," при закрытии позиции ", OrderTicket());
Sleep(10000);
RefreshRates();
break;
}
else Sleep(1000);
MarginPost=AccountBalance();
if (MarginPost<MarginStart)
{
lot=0.1;
}
else
if (lot > 0.3)
{
lot=0.3;
}
else
lot=lot+0.1;
cantrade=true;
}
}
}
//ExtMapBuffer2[i]=0.0;
//----
return(0);
}