Во многих сеточных советниках стоят функции по установке Дистанции между открытиями однонаправленных или противоположных ордеров. Пытаюсь их содрать по принципу "Чем меньше строка кода тем лучше", но они у меня не запускаются!
if(OrdersTotal() < 3)
{
if(Ask-StartPrice>=PipStep*Point)
// if(Ask-OpenPrice>=Point*Distance*2)
// if ((LastBuyPrice() -Ask) >= PipStep*Point)
// if (Ask>=NormalizeDouble(LastBuyPrice()+PipStep*Point,Digits))
if(open[1]<Close[0])
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"Trend Long",Magic,0,Blue);
}
Либо коротких нет... либо (если повернуть обратно >= ) короткие и длинные есть,но дистанция не устанавливается. Помогите советом или поделитесь готовой простой функцией если у кого есть и желательно с объяснялкой по её установке.
//+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if(OrdersTotal() < 3) { if(Open[1]<Close[0]) { if(DistMarketAndPos(NULL,OP_BUY,Magic)>10) // Дистанция > 10 пунктов { OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"Trend Long",Magic,0,Blue); } } } //---- return(0); } //+------------------------------------------------------------------+ //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает расстояние в пунктах между рынком и ближайшей | //| позицей | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" или NULL - текущий символ) | //| op - торговая операция ( -1 - любая позиция) | //| mn - MagicNumber ( -1 - любой магик) | //+----------------------------------------------------------------------------+ int DistMarketAndPos(string sy="", int op=-1, int mn=-1) { double d, p; int i, k=OrdersTotal(), r=1000000; if (sy=="" || sy=="0") sy=Symbol(); p=MarketInfo(sy, MODE_POINT); if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01; for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) { if (mn<0 || OrderMagicNumber()==mn) { if (OrderType()==OP_BUY) { d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p; if (r>d) r=NormalizeDouble(d, 0); } if (OrderType()==OP_SELL) { d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p; if (r>d) r=NormalizeDouble(d, 0); } } } } } return(r); }Как-то так
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Во многих сеточных советниках стоят функции по установке Дистанции между открытиями однонаправленных или противоположных ордеров. Пытаюсь их содрать по принципу "Чем меньше строка кода тем лучше", но они у меня не запускаются!
if(OrdersTotal() < 3)
{
if(Ask-StartPrice>=PipStep*Point)
// if(Ask-OpenPrice>=Point*Distance*2)
// if ((LastBuyPrice() -Ask) >= PipStep*Point)
// if (Ask>=NormalizeDouble(LastBuyPrice()+PipStep*Point,Digits))
if(open[1]<Close[0])
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"Trend Long",Magic,0,Blue);
}
Либо коротких нет... либо (если повернуть обратно >= ) короткие и длинные есть,но дистанция не устанавливается. Помогите советом или поделитесь готовой простой функцией если у кого есть и желательно с объяснялкой по её установке.