[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 281

 
drknn:
А вдруг там у него окажется кода не на 60, а на 70 баксов? :) ;)
Оставим на апгрейд :)
 
veti-k:
Привет! Подскажыте как определить скалька ордер в плюсе пунктов?
Если открыта позиция на покупку, то из текущей цены Bid надо отнять цену открытия позиции. Если позиция на продажу, то из цены открытия отнять текущую цену Ask.
 
paladin80:
Если открыта позиция на покупку, то из текущей цены Bid надо отнять цену открытия позиции. Если позиция на продажу, то из цены открытия отнять текущую цену Ask.

Разведчики донесли, что вместо Bid или Ask можно использовать OrderClosePrice()
 
Спасибо вам попрабую))
 
Уважаемые форумчане подскажите как запихнуть переменную из iCustom в ArrayMaximum ?
 
Alexandr24:
Уважаемые форумчане подскажите как запихнуть переменную из iCustom в ArrayMaximum ?
Для этого надо прочитать, что такое ArrayMaximum.

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Поиск элемента с максимальным значением. Функция возвращает позицию максимального элемента в массиве.

Поиск это процесс, а не переменная. То есть, вы можете присвоить значение индикатора элементу массива, а потом провести по массиву поиск наибольшего элемента с помощью ArrayMaximum.
 
granit77:
Для этого надо прочитать, что такое ArrayMaximum.

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Поиск элемента с максимальным значением. Функция возвращает позицию максимального элемента в массиве.

Поиск это процесс, а не переменная. То есть, вы можете присвоить значение индикатора элементу массива, а потом провести по массиву поиск наибольшего элемента с помощью ArrayMaximum.
Не подскажете как найти максимальное значение индикатора за вчерашний день? нашел первое и крайнее значения индикатора за вчерашний день но не получается найти максимальное значение вчерашнего дня, ArrayMaximum начинает поиск по всему графику, или может быть это через какую-ту другую функцию делается?
 

Всем добрый день, Сижу перед компом и бьюсь головой об клаву - не получается устранить одну ошибку в коде ... помогите пожалуйста начинающему.

Вот код моей совы:

extern double TakeProfit = 500;

extern double Lots = 0.1;

extern double Stoploss = 30;

extern double TrailingStop = 30;

extern string Indicator_1 = "SAR (SAR_STEP)";

extern double SAR_Step =0.02;

extern double SAR_MaxStep =0.2;

extern double GeneralShift = 0; // 0 - незакрытый бар, 1 - закрытый.

// Это переменные, которые будут

// отображаться во время

// соединения эксперта с графиком


//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start()

{

double a;

int b;

int total, ticket, cnt;


// Просто переменные для использования в программе


if(Bars<100)

{

Print("bars less than 100");

return(0);

}

// Это условие проверяет, есть ли в истории графиков более 100 свечей и если нет,

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

// недостатка информации


if(TakeProfit<5)

{

Print("TakeProfit less than 5");

return(0);

}

// Это условие проверяет уровень Тейк-профита (одной из внешних переменных,

// которая управляет уровнем фиксации прибыли. Нужен для того, чтобы проверить, не

// выставили ли вы уровни фиксации прибыли на неразрешенном для вашего ДЦ

// уровне. Нужен лишь для того, чтобы при НЕсрабатывании советника, вы четко знали

// в чем здесь ошибка. Очень советую ставить.


total=OrdersTotal();

if(total<1)

// Эта проверка нужна для того, чтобы не открывать сразу нескольких одинаковых позиций. Если ее не будет, то, скажем, если ваш эксперт срабатывает, когда стохастик находится в зоне перекупленности, то он будет совершать сделку на каждом тике, пока не истратит всю маржу.

// Поэтому, чтобы ограничить количество открываемых позиций, ставят данный

// ограничитель. Если он стоит, то советник не будет открывать более определенного

// количества позиций <х

{

// no opened orders identified

if(AccountFreeMargin()<(1000*Lots));

{

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

// Еще один вспомогательный кусок кода. Если средств на счете недостаточно, он

// выдаст ошибку. Данный кусок полностью бесполезен, если советник работает

// в реальном времени, но очень полезен при тестинге на истории.


if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)>Close[0]); // Open BUY

// Наконец, мы добрались до самого интересного. Вместо этих иксов, надо вставить

// условие, при котором происходит покупка.


{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-Stoploss*Point, Ask+TakeProfit*Point,"comment",16384,0,Green);


// Это условия покупки. В принципе, менять здесь ничего не надо, но для расширения

// кругозора, я расшифрую что здесь написано. Здесь сказано, что надо купить

// (OP_BUY) текущий символ (пара валют, к графику которого прикреплен советник),

// размер сделки Lots (переменная заданная в начале). Цена по рынку, с

// проскальзыванием 3, и со стоп-лосом и тейк-профитом, выставленными в

// начале, сделка будет с комментарием "comment", с определяющим числом 0, и на

// месте покупки, на графике, будет зелененькая срелочка с определяющим кодом

// 16384


if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

}


// Этот блок нужен только для того, чтобы записать в журнале, все ли прошло гладко.

// Или, в противном случае, записать ошибку, из-за которой что-то не получилось.


// Теперь тоже самое со ставкой на продажу. Вместо YYYYYYYY - условия

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)<Close[0])

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+Stoploss*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

return(0);

}

return(0);

}


// Теперь о выходе. Тут также ничего не изменилось, просто RRRRRRR - условие

// закрытия сделки по BUY, ZZZZZZZZ - по SELL


for(cnt=0;cnt

//с помощью for'a перебираются все открытые пощиции

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && // check for opened position

OrderSymbol()==Symbol()) // check for symbol

{

if(OrderType()==OP_BUY) // long position is opened

{

// should it be closed?

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)<Close[0]) //cloze BUY.

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position

return(0); // exit

}

// check for trailing stop

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // Тоже самое с короткой позицией

{

// should it be closed?

if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)>Close[0])//cloze SELL

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position

return(0); // exit

}

// check for trailing stop

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

}

return(0);

//--------

}

//-------- the end.

 

Начинающий автотрейдер не догоняет ошибку!!! Плиз ПОМОЖИТЕ КТО МОЖЕТ!!!!!!!!!!!!!!!!!!

'}' - unbalanced parentheses C:\Program Files (x86)\Forex4you MetaTrader 4\experts\Ñàðàíòîñ V101.mq4 (167, 1)

 
Ещё бы башкой не биться при таком форматировании кода. Ща исправлю :)
Причина обращения: