Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 63

 
FAQ:


понял, тогда еще вопросы :

а так вам нужно контролировать время открытия свечи функцией : iTime

Я пытался контролировать время открытия свечи функцией : iTime

Ордер открывается на 15 часовой свече......но 15 часовая свеча часто бывает не первая.

Перед ней более ранние свечи уже контактировали с 1.3000.

А мне нужно - что бы перед 15 часовой свечой,которая пересекла 1.3000 - не было других свечей.

Спасибо.

 
порой новички ставят в тупик... именно логикой, простой человеческой логикой. а программирование скорее линейно. попробуйте продумать ваши условия в одну линию.
 
FAQ:
порой новички ставят в тупик... именно логикой, простой человеческой логикой. а программирование скорее линейно. попробуйте продумать ваши условия в одну линию.

Давайте я изложу Вам свою идею графически.

http://clip2net.com/s/5vbxUK

А как бы Вы уложили эту идею в одну линию?

Спасибо.
 
по времени, в обратном порядке. именно так будет анализировать программа. представьте что вы в точке решения.
 
FAQ:
по времени, в обратном порядке. именно так будет анализировать программа. представьте что вы в точке решения.

Извините - не совсем понимаю Ваш замысел.

Буду признателен если напишете как это может выглядеть в виде кода..

Спасибо.

 
solnce600:

Всем добрый день!

Буду очень признателен всем кто подскажет как закодировать такую идею.


График ТФ 5

В данный момент bid - 1.3150

Есть ценовой уровень - 1.3000.

Цена опускается.

====================================

// Если цена пересечет 1.3000

// Если цена впервые пересечет 1.3000

// Если цена впервые пересечет 1.3000 и при пересечении будет находиться внутри 15 часовой свечи (т.е.это 15:00,15:05.....15:55)


// Открыть сделку.

===================================

Спасибо.



это только идея без полной реализации

extern double crossLevel = 1.3;
extern int hour = 15;

int start(){
    static int cross = 0;

    if (TimeHour(TimeCurrent()) == hour) {// свеча соответствует часу hour
        if (isCrossPrice(crossLevel, Bid)) {//пересечение уровня допустим Bid
            cross++;
            if (cross == 1) {// первое перечение уровня
                if (ордер ранее не открывался на этой свече) {// эту проверку реализуете сами
                    openOrder();// открываем ордер - реализацию сами придумайте
                    cross = 0;
                }
            }
        }
    }
}

bool isCrossPrice(double level, double price){
    bool res = false;
    static double prev = 0;

    if (prev > 0) {
        if ((prev <= level && price > level) || // пересечение уровня вверх
            (prev >= level && price < level)) { // пересечение уровня вниз
            res = true;
        }
    }
    prev = price;
    return(res);
}
 
keekkenen:

это только идея без полной реализации


Большое спасибо.
 
solnce600:


Извините - не совсем понимаю Ваш замысел.

Буду признателен если напишете как это может выглядеть в виде кода..

Спасибо.


До кода еще далеко, вы осознайте принцип, алгоритм. так только научитесь составлять алгоритм, так сразу и с кодом полегчает.
 

Уже второй день мучаюсь и не могу сообразить. Нужно найти самую низкую цену за последние n баров, но только не от текущего бара, а от бара получаемого через функцию. Функция возвращает индекс бара, на котором был открыт ордер. Вот от этого бара и нужно найти назад по истории на n баров самую низкую цену. Ниже мой код, что не так в нем?

 double low_price_n_bar()
 {
   
   double low_bar=100000, index_bar;
   
   for (int i=time_orders; i<=count_bar; i++) //time_orders индекс бара получаемого из функции, count_bars внешняя переменная количество баров для сдвига назад по истории
   {
    index_bar= ND(iLow(Symbol(),0,i));
    if (index_bar<low_bar)
    {
      low_bar=index_bar;     
    }
   
   }
   return(low_bar);
 }
 

Уважаемые форумчане! Огромная просьба помочь.


if (TimeBar==Time[0]) return(0);


double MA1 = NormalizeDouble(iMA(NULL,TimeFrame_2,MA_Period_2,MA_Shift_2,MA_Method_2,Applied_Price_2,0),Digits); // где 0 - это сдвиг относительно текущего бара на указ. кол-во периодов назад
//double MA21 = NormalizeDouble(iMA(NULL,timeframe_2,period_2,ma_shift_2,ma_method_2,applied_price_2,2),Digits);
double MA2 = NormalizeDouble(iMA(NULL,TimeFrame_3,MA_Period_3,MA_Shift_3,MA_Method_3,Applied_Price_3,0),Digits);
//double MA31 = NormalizeDouble(iMA(NULL,timeframe_3,period_3,ma_shift_3,ma_method_3,applied_price_3,2),Digits);
double MA3 = NormalizeDouble(iMA(NULL,TimeFrame_4,MA_Period_4,MA_Shift_4,MA_Method_4,Applied_Price_4,0),Digits);

double OsMA = NormalizeDouble(iOsMA(NULL,TimeFrame_5,FastEMA_5,SlowEMA_5,SignalSMA_5,Applied_Price_5,0),Digits);

if (MaxOrders>b && Low[0]>=MathMax(MA1,MA2)&& Low[0]>MA3 && Ask>MathMax(MA1,MA2)+DeltaOpen*Point && Ask>MA3 && MA2<MA3 && MA1<MA3 && OsMA>0 && Trade)
{
if (OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,SL,TP,"Puria_1",Magic,0,Blue) ==-1) TimeBar=0;
else TimeBar=Time[0];

}
if (MaxOrders>s && High[0]<=MathMin(MA1,MA2) && High[0]<MA3 && Bid<MathMin(MA1,MA2)-DeltaOpen*Point && Bid<MA3 && MA1>MA3 && MA2>MA3 && OsMA<0 && Trade)
{
if (OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slippage,SL,TP,"Puria_1",Magic,0,Red) ==-1) TimeBar=0;
else TimeBar=Time[0];
}

return(0);


С такими условиями советник открывает сделку, скажем, на SELL, закрывает ее по профиту и тут же открывает еще одну сделку на SELL. Как прописать в советникe, что при поступлении сигнала должна открываться только одна сделка, т.е. один сигнал - одна сделка.
Заранее благодарен.

Причина обращения: