Присоединяйтесь к нашему инвестиционному форуму, на котором уже 646,803 пользователей. Чтобы получить доступ ко многим закрытым разделам и начать общение - зарегистрируйтесь прямо сейчас.
Торговые стратегии, сигналы и системы. Методы анализа.
Первый пост Опции темы
Старый 04.12.2009, 20:09
#1
Интересующийся
 
Пол: Мужской
Инвестирую в: Форекс
Регистрация: 26.09.2009
Сообщений: 18
Благодарностей: 1
Советник на основе п.и trend.

Вот решил написать советник(пишу в первый раз), но выдает ошибку.Может кто подскажет в чем проблема.Заранее благодарю.

PHP код:
//+------------------------------------------------------------------+
//| igor4.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "https://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_Sfalse;

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

Symb=Symbol();

Total=0;

for(
int i=1i<=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==&& 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==&& 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_LotLts=Min_Lot;
if (
Lts*One_Lot Free)
Alert(" Не хватает денег на "Lts," лотов");
return;
}
//-------------------------------------------------------------------------------
while(true)
{ if (
Total==&& 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==&& 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 
4Alert("Торговый сервер занят. Пробуем ещё раз..");
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 2Alert("Общая ошибка.");
return(
0);case 5Alert("Старая версия терминала.");
Work=false;
return(
0); case 64Alert("Счет заблокирован.");
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_DistAlert("Увеличена дистанция стоп-приказа.");
}
return(
Parametr);

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

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

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



Вот сам индикатор. https://forum.mql4.com/c/forum/2009/11/Trend.rar
olegt вне форума
Старый 05.12.2009, 06:35
#2
Любитель
 
Пол: Мужской
Возраст: 36
Адрес: Тюмень
Инвестирую в: Форекс
Регистрация: 04.01.2009
Сообщений: 506
Благодарностей: 73
Ответ: Советник на основе п.и trend.

olegt, есть у меня подозрение что этот индикатор просто перерисовывается, и кажется что он всегда в точку бьет. Обратите внимание - еще цена не начала двигаться а он уже дает сигнал. Я юзал похожий FX_FISH.. внешне один в один. Может в этом проблема?
Simmk700 вне форума
Старый 05.12.2009, 13:22
#3
bvn
Заблокированный
 
Имя: Виталий
Пол: Мужской
Адрес: Полтава, Украина
Инвестирую в: Форекс
Регистрация: 16.06.2008
Сообщений: 8,092
Благодарностей: 3,604

награды Волшебный горшочек 
Ответ: Советник на основе п.и trend.

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

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

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