TICKET_SELL = OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),5,0,0,NULL,0,0,CLR_NONE);
OrderClose (TICKET_SELL, Lot, NormalizeDouble(Ask,Digits), 2, CLR_NONE); // Закрываем SELL
Если у вас один ордер, тикет запоминайте. А вы закрываете все ордера, и те кот. вручную открыли.
Другой фрактал - это вы имеете ввиду противоположный?
И уточните, что некорректно работает.
Если Вам нужно только удаление, я сделал. еще исправил Магик, а то как то он каряво реализован.
//| we.mq4 |
//| Copyright © 2010, expforex |
//| http://www.expforex.at.ua |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, expforex"
#property link "http://www.expforex.at.ua"
//--------------------------------------------------------------------
extern int
stoploss = 500,
takeprofit = 500,
magik =123,
risk = 10;
double LOT;
//--------------------------------------------------------------------
double SL,TP;
int TimeBar;
//--------------------------------------------------------------------
int start()
{
if (TimeBar==Time[0]) return(0);
double hight=iFractals(NULL,0,MODE_UPPER,2);
double low=iFractals(NULL,0,MODE_LOWER,2);
if (low>0) //Buy
{
TimeBar=Time[0];
TP = NormalizeDouble(Ask + takeprofit*Point,Digits);
SL = NormalizeDouble(Ask - stoploss*Point,Digits);
LOT = LOT(risk,1);
CPD(Symbol(),OP_SELL,magik);
OPENORDER ("Buy");
}
if (hight>0) //Sell
{
TimeBar=Time[0];
TP = NormalizeDouble(Bid - takeprofit*Point,Digits);
SL = NormalizeDouble(Bid + stoploss*Point,Digits);
LOT = LOT(risk,1);
CPD(Symbol(),OP_BUY,magik);
OPENORDER ("Sell");
}
return(0);
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int error = -1;
if (ord=="Buy" ){
while(error == -1){
RefreshRates();
error=OrderSend(Symbol(),OP_BUY, LOT,NormalizeDouble(Ask,Digits),30,SL,TP,"", magik,3);
}
}
if (ord=="Sell"){
while(error == -1){
RefreshRates();
error=OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),30,SL,TP,"",magik,3);
}
}
if (error==-1) //????????? ??????? OK
{
ShowERROR(error,0,0);
}
return;
}
//--------------------------------------------------------------------
void ShowERROR(int Ticket,double SL,double TP)
{
int err=GetLastError();
switch ( err )
{
case 1: return;
case 2: Alert("Нет связи с торговым сервером " ,Ticket," ",Symbol());return;
case 3: Alert("Error неправильные параметры Ticket ", Ticket," ",Symbol());return;
case 130: Alert("Error близкие стопы Ticket ", Ticket," ",Symbol());return;
case 134: Alert("Недостаточно денег ", Ticket," ",Symbol());return;
case 146: Alert("Error Подсистема торговли занята ", Ticket," ",Symbol());return;
case 129: Alert("Error Неправильная цена ", Ticket," ",Symbol());return;
case 131: Alert("Error Неправильный объем ", Ticket," ",Symbol());return;
case 4051:Alert("Error Недопустимое значение параметра функции ",Ticket," ",Symbol());return;
case 4105:Alert("Error Ни один ордер не выбран ", Ticket," ",Symbol());return;
case 4063:Alert("Error Ожидается параметр типа integer ", Ticket," ",Symbol());return;
case 4200:Alert("Error Объект уже существует ", Ticket," ",Symbol());return;
default: Alert("Error ",err," Ticket ", Ticket," ",Symbol());return;
}
}
//--------------------------------------------------------------------
double LOT(int risk,int ord)
{
double MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
LOT = AccountFreeMargin()*risk/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/ord;
if (LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT);
if (LOT<MINLOT) LOT = MINLOT;
if (MINLOT<0.1) LOT = NormalizeDouble(LOT,2); else LOT = NormalizeDouble(LOT,1);
return(LOT);
}
//--------------------------------------------------------------------
void CPD(string sy="",int op=-1,int mn=-1)
{
int i,k=OrdersTotal();
if(sy=="0") sy=Symbol();
for(i=k-1; i>=0; 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) CPBS();
}
}
}
}
}
//+------------------------------------------------------------------+
void CPBS()
{
bool fc;
color clClose;
double ll,pa,pb,pp;
int err,it;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for(it=1; it<=1; it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if(OrderType()==OP_BUY)
{
pp=pb;
} else {
pp=pa;
}
ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, 1, clClose);
if(fc)
{
break;
} else {
err=GetLastError();
if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
Sleep(1000*5);
}
}
}
}
А какой фрактал вы называете "на sell"?
я вас не понял ?
как правильно условия задать что бы при появлении фрактала открывался ордер а при появлении другого фрактала ордер закрывался и открывался новый ?
как правильно условия задать что бы при появлении фрактала открывался ордер а при появлении другого фрактала ордер закрывался и открывался новый ?
при каком фрактале вы хотите открывать sell? при максимуме или при минимуме?
здесь проблема в том, что фрактал определяется спустя 2 свечи
пока заметил такую ошибку,второй бар перерисовывается, нужно третий использовать.
iFractals(NULL,0,MODE_UPPER,2)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
парни помогте разобратся если не трудно вот я сделал советник по фраксталам, ордеа он открывает как надо а вот как сделать что бы он их закрывал при появлении другого фрактала ? скилет взял из другого советника думаю это не влияет помогите пожалуста.
вот код советника