Просмотрите примерный код MACD.
Измените переменные, получаемые для внутреннего индикатора Use By MACD, чтобы получить значения индикатора Ichmoku.
Сделайте небольшие изменения, а затем проверьте код на правильность синтаксиса.
редактировать - Также полезно посмотреть, как использовать индикатор Ichmoku здесь
Просмотрите примерный код MACD.
Измените переменные, получаемые для внутреннего индикатора Use By MACD, чтобы получить значения индикатора Ichmoku.
Сделайте небольшие изменения, а затем проверьте код на правильность синтаксиса.
редактировать - Также полезно посмотреть, как использовать индикатор Ichmoku здесь
Хорошо, я переделал его, основываясь на примере MACD, но с этими ошибками:
'\end_of_program' - ending bracket '}' expected C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)
'\end_of_program' - несбалансированная левая скобка C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)
Это новая версия:
//+------------------------------------------------------------------+
//| ICHIMOKU.mq4 |
//| Copyright © 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
extern double TakeProfit = 50;
extern double Lots = 0.1;
extern double TrailingStop = 30;
extern double Tenkan = 9;
extern double Kijun = 26;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int start()
{
double tenkan_sen;
double kijun_sen;
int cnt, ticket, total;
//----
if(Bars<100)
{
Print("баров меньше 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit меньше 10");
return(0); // проверяем TakeProfit
}
//----
total=OrdersTotal();
if(total<1)
{
// открытых ордеров не выявлено
if(AccountFreeMargin()<(1000*Lots))
{
Print("У нас нет денег. Свободная маржа = ", AccountFreeMargin());
return(0);
}
// проверка возможности длинной позиции (BUY)
if(tenkan_sen>kijun_sen)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "ichimoku",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Открыт ордер BUY : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера BUY : ",GetLastError());
return(0);
// важно правильно войти в рынок,
// но еще важнее правильно выйти из него...
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // проверка наличия открытой позиции
OrderSymbol()==Symbol()) // проверка наличия символа
{
if(OrderType()==OP_BUY) // открыта длинная позиция
{
// должна ли она быть закрыта?
if((tenkan_sen<kijun_sen))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // закрываем позицию
return(0); // выход
}
// проверка наличия трейлинг-стопа
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
}
}
return(0);
}
В этот момент в "вашем" кодексе . . .
} else Print("Error opening BUY order : ",GetLastError()); return(0); // <------ here ! ! ! // it is important to enter the market correctly, // but it is more important to exit it correctly... for(cnt=0;cnt<total;cnt++) {
... отмечено здесь ! ! ! Вы перешли от размещения ордеров к их закрытию ... но вы пропустили, возможно, 2 закрывающие ( } ) скобки из части кода покупки ... если вы отступаете код разумным образом, это легко увидеть.
Хорошо, спасибо. Я сделал это изменение, которое удалило '\end_of_program' - завершающая скобка '}' ожидается C:\Program Files (x86)\MetaTrader 4\experts\ICHIMOKU.mq4 (80, 13)
Он помечен <=======
// проверка возможности длинной позиции (BUY)
if(tenkan_sen>kijun_sen)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "ichimoku",16384,0,Green);
if(ticket>0)
} <=======
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(" Открытордер BUY: ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера BUY : ",GetLastError());
return(0);
}
// важно правильно войти в рынок,
// но еще важнее правильно выйти из него...
Хотя кажется, что этого не должно быть.
У вас есть излишек открывающегося кронштейна на этой линии...
if ( ( tenkan_sen<kijun_sen ) // <-- surplus (
Вы инициализируете эти переменные, но не даете им никаких значений. . .
if ( tenkan_sen > kijun_sen )
... поэтому тест всегда будет ложным. Этот советник никогда не разместит ордер.
Ваш код в версии с отступами и который компилируется . . .
//+------------------------------------------------------------------+ //| ICHIMOKU.mq4 | //| Copyright © 2012, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2012, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" extern double TakeProfit = 50; extern double Lots = 0.1; extern double TrailingStop = 30; extern double Tenkan = 9; extern double Kijun = 26; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int start() { double tenkan_sen; double kijun_sen; int cnt, ticket, total; //---- if(Bars<100) { Print("bars less than 100"); return(0); } if(TakeProfit<10) { Print("TakeProfit less than 10"); return(0); // check TakeProfit } //---- total=OrdersTotal(); if(total<1) { // no opened orders identified if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } // check for long position (BUY) possibility if(tenkan_sen>kijun_sen) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"ichimoku",16384,0,Green); 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); } // added by RaptorUK } // added by RaptorUK // it is important to enter the market correctly, // but it is more important to exit it correctly... for(cnt=0;cnt<total;cnt++) { 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(tenkan_sen<kijun_sen) // removed surplus ( RaptorUK { 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); } } } } } } return(0); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я пытаюсь создать советник, который будет автоматически покупать 1 единицу, когда tenkan-sen>kijun-sen (когда линия tenkan-sen выше линии kijun-sen), а затем продавать ее, когда tenkan-sen ниже kijun-sen.
Я полный новичок и начал вчера, пытаясь собрать примеры вместе и т.д.
Ниже приведен результат, и я понимаю, что это, вероятно, полная чушь.
При попытке компиляции я получаю классическое "'(' - function definition unexpected" на строках int start() (скопированных из скрипта "trade" в навигаторе).
Пожалуйста, подскажите, как я могу заставить эту идею работать и заранее спасибо.
#property copyright "#copyright#"
#property link "#link#"
extern double Lots = 0.1;
extern double Tenkan = 9;
extern double Kijun = 26;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
Bars<=Tenkan, Bars<=Kijun;
//----
if(Bars<=Tenkan>Bars<=Kijun)
{
Print ("Тенкан-сен больше Киджун-сен");
return(0);
}
//----
//+------------------------------------------------------------------+
//| скрипт "торговля на все деньги"|
//+------------------------------------------------------------------+
int start()
{
//----
if(MessageBox("Вы действительно хотите купить 1.00 "+Symbol()+" по цене ASK? ",
"Script",MB_YESNO|MB_ICONQUESTION)!=IDYES) return(1);
//----
int ticket=OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0, "комментарий эксперта",255,0,CLR_NONE);
if(ticket<1)
{
int error=GetLastError();
Print("Ошибка = ",ErrorDescription(error));
return;
}
//----
OrderPrint();
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
Bars<=Tenkan, Bars<=Kijun;
//----
if(Bars<=Tenkan<Bars<=Kijun)
{
Print ("Тенкан-сен меньше Киджун-сен");
return(0);
}
//----
int start()
{
//----
if(MessageBox("Вы действительно хотите ПРОДАТЬ 1.00 "+Symbol()+" по цене Bid? ",
"Script",MB_YESNO|MB_ICONQUESTION)!=IDYES) return(1);
//----
int ticket=OrderSend(Symbol(),OP_SELL,1.0,Bid,3,0,0, "комментарий эксперта",255,0,CLR_NONE);
if(ticket<1)
{
int error=GetLastError();
Print("Ошибка = ",ErrorDescription(error));
return;
}
//----
OrderPrint();
return(0);
}
//+------------------------------------------------------------------+