Вот это точно неправильно
extern double X = AccountBalance() extern int Y = 100 extern int Z = 69 extern int StopLoss = X/Y*Z // вроде так и вроде здесь
Надо бы хотя бы ставить точку с запятой. И убрать extern. Расчеты перенести в init()
skunk писал(а) >>Покажите пожалуйста ошибки, разъясните их сущность .......
//| Описание : Открытие позиций | //+----------------------------------------------------------------------------+ int OpenSymbol(string vSymbol) { double point = MarketInfo(vSymbol,MODE_POINT); double bid = MarketInfo(vSymbol,MODE_BID); double ask = MarketInfo(vSymbol,MODE_ASK); if(!ExistPositions(vSymbol)) { 2 if(GetSignal(vSymbol)==1) OrderSend(vSymbol,OP_BUY,0.05,ask,3,ask-StopLoss*point,ask+TakeProfit*point,NULL,666,0,Green); // кажется Стоп Лосс не правильно воткнул и зачем нужен этот магический номер... Alert (GetLastError()); // Сообщение об ошибке if(GetSignal(vSymbol)==-1) OrderSend(vSymbol,OP_SELL,0.05,bid,3,bid+StopLoss*point,bid-TakeProfit*point,NULL,666,0,Red); // кажется Стоп Лосс не правильно воткнул и зачем нужен этот магический номер... Alert (GetLastError()); // Сообщение об ошибке } }
так будет корректней, т.к. у тебя используется определенный инструмент, плюс забыл умножить на point
Нет условия закрытия прибыльных позиций. желательно добавить TakeProfit и вынести в extern.
По поводу уровней стопов и профитов. ask-StopLoss*point,ask+TakeProfit*point и bid+StopLoss*point,bid-TakeProfit*point
лучше заменить на следующее:
OrderSend(vSymbol,OP_BUY,0.05,ask,3,SLB,TPB,NULL,666,0,Green),
OrderSend(vSymbol,OP_SELL,0.05,bid,3,SLS,TPS,NULL,666,0,Red);
так как если стоп или профит указать равным нулю - будет ошибка.
И соответственно чуть выше добавить следующие кусочки.
double ModeStopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); //Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах.
//////////////////////////////////////////////////////////////////////////////////////////////////
double TSBuy() /////////// определение уровней TP и SL для BUY ///////////
//////////////////////////////////////////////////////////////////////////////////////////////////
{
if(TakeProfit>ModeStopLevel>0) TPB=NormalizeDouble(Ask + TakeProfit*ModePoint,Digits);
else TPB = 0.0;
if(StopLoss>ModeStopLevel>0) SLB =NormalizeDouble(Ask - StopLoss*ModePoint,Digits);
else SLB = 0.0;
}
//------------------------------------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////////////////////////////////
double TSSell() /////////// определение уровней TP и SL для SELL ///////////
//////////////////////////////////////////////////////////////////////////////////////////////////
{
if(TakeProfit>ModeStopLevel>0) TPS=NormalizeDouble(Bid - TakeProfit*ModePoint,Digits);
else TPS =0.0;
if(StopLoss>ModeStopLevel>0) SLS=NormalizeDouble(Bid + StopLoss*ModePoint,Digits);
else SLS = 0.0;
}
//-
ни как не пойму, как описывается условие: если K>D на 5, то ...(покупать).
У меня получается только это:
if (iStochastic(NULL,60,14,3,3,MODE_SMA,0,MODE_MAIN,0)>iStochastic(NULL,60,14,3,3,MODE_SMA,0,MODE_SIGNAL,0)); vSignal =+1; //up if (iStochastic(NULL,60,14,3,3,MODE_SMA,0,MODE_MAIN,0)<iStochastic(NULL,60,14,3,3,MODE_SMA,0,MODE_SIGNAL,0)); vSignal =-1;//down if (iStochastic(NULL,60,14,3,3,MODE_SMA,0,MODE_MAIN,0)==iStochastic(NULL,60,14,3,3,MODE_SMA,0,MODE_SIGNAL,0)); vSignal =0; //close
а где и как вставлять "на 5" ???
Может быть, попробовать вот так:
if ( (iStochastic(NULL,60,14,3,3,MODE_SMA,0,MODE_SIGNAL,0) -iStochastic(NULL,60,14,3,3,MODE_SMA,0,MODE_MAIN,0)) >5) //покупка vSignal_BUY =true; else vSignal_BUY=false; //---------------------------- if ( (iStochastic(NULL,60,14,3,3,MODE_SMA,0,MODE_MAIN,0) -iStochastic(NULL,60,14,3,3,MODE_SMA,0,MODE_SIGNAL,0)) >5) //продажа vSignal_SELL =true; else vSignal_SELL=false;
А последнее условие можно убрать. Т.е. оно практически никогда не выполняется, т.к. значение стохастика возвращается с точностью, как минимум, 4 знака после запятой.
и сигнальная линия проскользнет через главную без равенства.
Вы наберите в поиске стохастик. По этому индюку много материала и примеров кода..
Напр. вот тут 'Индикатор Стохастик. Любопытное наблюдение.'
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
от программирования я далек, но заинтересовался я тут на досуге в пятницу, этим нелегким делом.
Прочитал учебник MQL4, пробежался по справочнику MQL4, нашел подходящего готового советника https://www.mql5.com/ru/code/8942 и пробую теперь подогнать его под свои нужды.
В реале рядом - никого, кто мог бы мне разложить по полочкам всю эту кухню, а одному по-быстрому, только по-книжкам освоить программинг не получается... Вот обращаюсь к вам за помощью. Покажите пожалуйста ошибки, разъясните их сущность и помогите там, где вообще не понимаю :)
Заранее благодарю всех откликнувшихся.
Итак, исходные данные:
.................................................................................................................................
Инструмент: Ger30Jun09
Индикатор: Stochastic 14,3,3; Цены: Low/High; Метод МА: Simple
Расчетное время: H1
Размер лота: 0.05
Ордер Покупка Открытие: если линия К > линии D на 5 от точки пересечения
Ордер Покупка Закрытие: если линия K = линии D
Ордер Продажа Открытие: если линия К < линии D на 5 от точки пересечения
Ордер Продажа Закрытие: если линия K = линии D
Стоп Лосс: -69% от суммы счета (Account Balance)
..................................................................................................................................
Вот, что у меня получается на сегодняшний день: