externint TakeProfit=18;
externint StopLoss=18;
externdouble Lot=0.01;
externint StartTime=0;
int Today=0;
int h=10;
int h1=26;
int mag=777;
bool b=0,s=0, //соответственно бай или селл
bs=0,// если закрытие по стоплоссу ордера бай
ss=0,// если закрытие по стоплоссу ордера sell
bt=0,
st=0;// то же по ТПdouble bl=0,sl=0; // лоты соответсвенно для бай и селл//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
if(DayOfWeek()==0 || DayOfWeek()==6) return(0); // в выходные не работаемif(!IsTradeAllowed()) return(0); // пропустим тик если терминал занятint total = OrdersTotal();
if(total == 0)
{NewOrder(OP_BUY,Lot);
NewOrder(OP_SELL,Lot);
NewOrder(OP_BUYLIMIT,Lot);
NewOrder(OP_SELLLIMIT,Lot);
NewOrder(OP_BUYSTOP,Lot);
NewOrder(OP_SELLSTOP,Lot);
Today=TimeDay(TimeCurrent());}
{
for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol())
{ if (OrderType() == OP_BUY ) {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1;
if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*100; break;}
if (OrderType() == OP_SELL) {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1;
if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*100; break;}
}
}
}
}//endif(bs==1||bl==1)
{
NewOrder1(OP_BUYLIMIT,Lot);
Today=TimeDay(TimeCurrent());}
а вот открытие ордера
int NewOrder1(int Cmd,double Lot)
{double TP=0; //тейкпрофитdouble SL=0; //стоплоссdouble PR=0; //Ценаdouble LT=0; //Лотwhile(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUYLIMIT)
{PR=Ask-Point*h;
if(TakeProfit>0) TP=PR+TakeProfit*Point;
if(StopLoss>0) SL=PR-StopLoss*Point;
if(Lot>0) LT=3*Lot;}
int tic1=OrderSend(Symbol(),Cmd,LT,PR,3,SL,TP,0,mag,0,CLR_NONE);
//-----------if(tic1<0) Print(GetLastError());
if(tic1>0){
b=0;s=0; //соответственно бай или селл
bs=0;// если закрытие по стоплоссу ордера бай
ss=0;// если закрытие по стоплоссу ордера sell
bt=0;
st=0;// то же по ТП
bl=0;sl=0; // лоты соответсвенно для бай и селл
}
//-----------return(tic1);}
Борис, ну так это же еще проще. Бросаете эту строчку:
В самых верх кода (чтобы была отдельно, а не в какой либо функции). А далее в тех местах, где есть вызов функции OrderSend(...), просто заключаете ее в дополнительные объятия оператора if
Теперь перед открытием очередной сделки, будет происходить проверка, происходили на текущем баре сделки или нет. Если они были, то текущий бар был запомнен в переменной new, и если текущий бар, совпадает с сохраненным, то сделка открыта не будет. Соответственно если бар новый, то его время открытия не совпадет с данными переменно new, сделка откроется, переменная new, получит новое значение.
Точно не знаю архитектуру вашего эксперта, но данный способ должен работать в большинстве случаев.
Вообще не пойму как оно у вас себя чуйствует... Фигурные скобки друг дружке не соответствуют, одна закрывающая вообще потеряна... Сам чёрт ногу сломит. Приведите в порядок свой код... тяжело с ним разбираться, а компилировать и запускать нет возможности - свои коды отрабатываем-с...
всеравно открывает пачкой этот ордер
вот как стоят у меня переменые в експерте
а вот открытие ордера
подскажите пожалуйста мне код функции которая будет ставить стоп один раз на уровне безубытка, когда профит будет к примеру 20 пунктов
Заранее спасибо за ответ:)
Борис, ну так это же еще проще. Бросаете эту строчку:
В самых верх кода (чтобы была отдельно, а не в какой либо функции).
А далее в тех местах, где есть вызов функции OrderSend(...), просто заключаете ее в дополнительные объятия оператора if
Теперь перед открытием очередной сделки, будет происходить проверка, происходили на текущем баре сделки или нет. Если они были, то текущий бар был запомнен в переменной new, и если текущий бар, совпадает с сохраненным, то сделка открыта не будет. Соответственно если бар новый, то его время открытия не совпадет с данными переменно new, сделка откроется, переменная new, получит новое значение.
Точно не знаю архитектуру вашего эксперта, но данный способ должен работать в большинстве случаев.
Огромное Вам спасибо! Подошло отлично!
Не соображу, как лучше поступить.
Есть индикатор, с кучкой массивов. Второму индикатору надо с этими массивами поработать. Посчитать и результат вывести в свою таблицу.
Самое простое было бы вызвать этот индикатор, но так, похоже, нельзя.
Как добраться до чужих массивов?
Не соображу
Здраствуйте подскажите пожалуста как логи посмотреть в МТ4
Не надо 15 постов с одним содержим создавать. А если получилось, то желательно за собой почистить. Не ждать дяденек.
Наверное ну очень нужно... :) Или мышку заело...
Это не мышку заело. Это нетерпение. Я 20 минут 15 постов в итоге удалял.
Это не мышку заело.
всеравно открывает пачкой этот ордер
вот как стоят у меня переменые в експерте
а вот открытие ордера
Это не мышку заело. Это нетерпение. Я 20 минут 15 постов в итоге удалял.