• Добро пожаловать на инвестиционный форум!

    Во всем многообразии инвестиций трудно разобраться. MMGP станет вашим надежным помощником и путеводителем в мире инвестиций. Только самые последние тренды, передовые технологии и новые возможности. 400 тысяч пользователей уже выбрали нас. Самые актуальные новости, проверенные стратегии и способы заработка. Сюда люди приходят поделиться своим опытом, найти и обсудить новые перспективы. 16 миллионов сообщений, оставленных нашими пользователями, содержат их бесценный опыт и знания. Присоединяйтесь и вы!

    Впрочем, для начала надо зарегистрироваться!
  • 🐑 Моисей водил бесплатно. А мы платим, хотя тоже планируем работать 40 лет! Принимай участие в партнеской программе MMGP
  • 📝 Знаешь буквы и умеешь их компоновать? Платим. Дорого. Бессрочная акция от MMGP: "ОПЛАТА ЗА СООБЩЕНИЯ"

Советник на основе п.и trend.

olegt

Интересующийся
Регистрация
27.09.2009
Сообщения
18
Реакции
1
Поинты
0.000
Вот решил написать советник(пишу в первый раз), но выдает ошибку.Может кто подскажет в чем проблема.Заранее благодарю.

PHP:
//+------------------------------------------------------------------+
//| igor4.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

//---------------------------------------------------------------------------

extern double StopLoss =200;

extern double TakeProfit =100;

extern double Lots =0.1;

extern int period = 10;

extern int price = 1;

bool Mode_fact = false;

bool signals = false;

bool Work = true;

extern double Prots =0.07;

string Symb;

//-------------------------------------//

int start()
{
//----
int

Total,
Tip=-1,
Ticket;
double
valume,
Lot,
Lts,
Min_Lot,
Step,
Free,
One_Lot,
Price,
SL,
TP;
bool
Ans =false,
Cls_B = false,
Cls_S = false,
Opn_B = false,
Opn_S= false;

//-----------------------------------------------------------------------------------------//

Symb=Symbol();

Total=0;

for(int i=1; i<=OrdersTotal(); i++)
{ if (OrderSelect(i-1,SELECT_BY_POS)==true)
{ if (OrderSymbol()!=Symb)continue;
if (OrderType()>1)
{ Alert("Обнаружен отложенный ордер. Эксперт не работает.");
return;
}
Total ++;
if (Total > 1)
{
Alert("Несколько рыночных ордеров. Эксперт не работает.");
return;
}
Ticket=OrderTicket();
Tip =OrderType();
Price =OrderOpenPrice();
SL =OrderStopLoss();
Lot =OrderLots();
}
}
//--------------------------------------------------------------------//

valume =CurrentPrice-iBands(NULL,0,Bands_Period,Bands_Deviation,0,Bands_Mode,Power_Price,i);

if (valume > 0);
{
Opn_B=true;
Opn_S=true;
}
if (valume <= 0);
{
Cls_B=true;
Cls_S=true;

}
//------------------------------------------------------------------------------------------//

while(true)
{ if (Tip==0 && Cls_B==true)

{
Alert("Попытка закрыть Buy ",Ticket,". Ожидание ответа..");
RefreshRates();
Ans=OrderClose(Ticket,Lot,Bid,2);
if (Ans==true)
{ Alert ("Закрыт ордер Buy ",Ticket); break;
} if (Fun_Error(GetLastError())==1)
continue;
return; }
if (Tip==1 && Cls_S==true)
{
Alert("Попытка закрыть Sell ",Ticket,". Ожидание ответа..");
RefreshRates();
Ans=OrderClose(Ticket,Lot,Ask,2);
if (Ans==true)
{ Alert ("Закрыт ордер Sell ",Ticket);
break;
} if (Fun_Error(GetLastError())==1)
continue;
return;
}
break;
}
//-------------------------------------------------------------------------//
RefreshRates();
Min_Lot=MarketInfo(Symb,MODE_MINLOT);
Free =AccountFreeMargin();
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);
Step =MarketInfo(Symb,MODE_LOTSTEP);
if (Lots > 0)
Lts =Lots;
else
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;
if(Lts < Min_Lot) Lts=Min_Lot;
if (Lts*One_Lot > Free)
{ Alert(" Не хватает денег на ", Lts," лотов");
return;
}
//-------------------------------------------------------------------------------
while(true)
{ if (Total==0 && Opn_B==true)
{
RefreshRates();
SL=Bid - New_Stop(StopLoss)*Point;
TP=Bid + New_Stop(TakeProfit)*Point;
Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);
if (Ticket > 0)
{ Alert ("Открыт ордер Buy ",Ticket);
return;
} if (Fun_Error(GetLastError())==1)
continue;
return;
} if (Total==0 && Opn_S==true)
{
RefreshRates();
SL=Ask + New_Stop(StopLoss)*Point;
TP=Ask - New_Stop(TakeProfit)*Point;
Alert("Попытка открыть Sell. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);
if (Ticket > 0)
{ Alert ("Открыт ордер Sell ",Ticket);
return;
}
if (Fun_Error(GetLastError())==1)
continue;
return;
} break;
}
//----
return;
}
int Fun_Error(int Error){
switch(Error)
{
case 4: Alert("Торговый сервер занят. Пробуем ещё раз..");
Sleep(3000); return(1);
case 135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); return(1);
case 136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false)Sleep(1);return(1); case 137:Alert("Брокер занят. Пробуем ещё раз..");
Sleep(3000);
return(1);case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500);
return(1); case 2: Alert("Общая ошибка.");
return(0);case 5: Alert("Старая версия терминала.");
Work=false;
return(0); case 64: Alert("Счет заблокирован.");
Work=false;
return(0);case 133:Alert("Торговля запрещена.");
return(0);case 134:Alert("Недостаточно денег для совершения операции.");
return(0);default: Alert("Возникла ошибка ",Error); return(0); }
}
//-------------------------------------------------------------- 11 --
int New_Stop(int Parametr) // Проверка стоп-прик.
{
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);
if (Parametr < Min_Dist){
Parametr=Min_Dist; Alert("Увеличена дистанция стоп-приказа.");
}
return(Parametr);
}

Внизу я прикрепил, не уверен я, что у меня все правильно поэтому внизу укажу логику торговли:

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

Как мне произвести в жизнь этот алгоритм?
алгоритм, если volume > 0, то покупать, меньше или ровно продавать.



Вот сам индикатор. http://forum.mql4.com/c/forum/2009/11/Trend.rar
 

Simmk700

Любитель
Регистрация
05.01.2009
Сообщения
336
Реакции
3
Поинты
0.000
Ответ: Советник на основе п.и trend.

olegt, есть у меня подозрение что этот индикатор просто перерисовывается, и кажется что он всегда в точку бьет. Обратите внимание - еще цена не начала двигаться а он уже дает сигнал. Я юзал похожий FX_FISH.. внешне один в один. Может в этом проблема?
 

bvn

Новичок
Регистрация
17.06.2008
Сообщения
7,351
Реакции
2,723
Поинты
0.000
Ответ: Советник на основе п.и trend.

Не знаю, стоило ли вставлять свои 5... Если не к месту, то можете мой пост просто проигнорировать.

Так вот я считаю, что для того, чтобы люди захотели искать ошибку в коде, нужно:
1. Четко указать какую именно ошибку выдает и когда (во время комплияции или во время исполнения).
2. Не постить длинный код всей программы, а локализовать ту часть, где возникает ошибка.
3. Использовать удобочитаемый стиль кодирования.

В противном случае, программистам, чтобы ответить на вопрос, надо брат ваш код, копировать в файл, пытаться его скомпилировать и запустить, потом разбираться в плохо читаемом коде и находить ошибку... Большинство программистов, включая меня, обламаются еще в самом начале... Запускать терминал? Редактор? Копировать код? Да ну его...
 
Сверху Снизу