'не могу выложить советника ' - тут написано, как правильно вставить код
//+------------------------------------------------------------------+ //| 444.mq4 | //| | //| https://www.metaquotes.net/ | //+------------------------------------------------------------------+
#property link "https://www.metaquotes.net/"
//---- input parameters extern int StartBar=0; // начальный бар, с которого идет отсчет двух одинаковых палок extern int TakeProfit=20; //Величина Тейк Профита extern int StopLoss=0; //Величина Стоп Лоса extern int Trailing=20; // Величина трейлинга extern int MaxOrders=10; // максимальное количество одновремено открытых ордеров extern int MA1_Period=5; // Период 1-й МА extern int MA2_Period=34; // Период 2-й МА extern int MA1_Method=1; // Метод вычисления МА1 (SMA=0,EMA=1,SMMA=2,LWMA=3) extern int MA2_Method=1; // Метод вычисления МА2 (SMA=0,EMA=1,SMMA=2,LWMA=3) extern int MA1_Price=0; // Метод вычисления цены МА1 extern int MA2_Price=0; // Метод вычисления цены МА2 extern int MA1_Shift=1; // Временной сдвиг МА1 extern int MA2_Shift=1; // Временной сдвиг МА2 extern double Lot=0.01; // Фиксированный лот extern int Slippage=0; // Отклонение цены для рыночных ордеров int New_Bar; // 0/1 Факт образования нового бара int Time_0; // Время начала нового бара int PosOpen; // Направление пересечения int PosClose; // Направление пересечения int total; // Количество открытых ордеров double MA1_0; // Текущее значение 1-й МА (розов) double MA1_1; // Предыдущее значение 1-й МА (розов) double MA2_0; // Текущее значение 2-й МА (голубая) double MA2_1; // Предыдущее значение 2-й МА (голубая) int orderBuy; // 1 = факт налиия ордера Buy int orderSell; // 1 = факт налиия ордера Sell datetime last;
//============================================================================================
int start()
{
double a;
int b;
int total, ticket,cnt;
if(Bars<100) // Это условие проверяет, есть ли в истории графиков более 100 свечей.
{
Print("bars less than 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return(0);
}
total=OrdersTotal();
if(total<1)
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
{
orderBuy=0;
orderSell=0;
double price;
int openOrders=0;
{
if(OrderSelect(SELECT_BY_POS,MODE_TRADES)==true) // Выбираем ордер
}
if(OrderType()==OP_BUY) // Если стоит ордер на покупку
{
orderBuy=1;
}
if(OrderType()==OP_SELL) // Если стоит ордер на продажу
{
orderSell=1;
}
New_Bar=0; // Для начала обнулимся
if (Time_0 != Time[0]) // Если уже другое время начала бара
{
New_Bar= 1; // Новый бар
Time_0 = Time[0]; // Запомним время начала нового бара
}
MA1_0=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 0); // Текущее значение 1-й МА
MA1_1=iMA(NULL,0, MA1_Period, MA1_Shift,MAMethod(MA1_Method), MAPrice(MA1_Price), 1); // Предыдущее значение 1-й МА
MA2_0=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 0); // Текущее значение 2-й МА
MA2_1=iMA(NULL,0, MA2_Period, MA2_Shift,MAMethod(MA2_Method), MAPrice(MA2_Price), 1); // Предыдущее значение 2-й МА
if (PositionOpen()==1 && New_Bar==1) // Движение снизу вверх = откр. Buy
{
OpenBuy();
}
if (PositionOpen()==2 && New_Bar==1) // Движение сверху вниз = откр. Sell
{
OpenSell();
}
//============================================================================================
int PositionOpen() { PosOpen=0; if ((MA1_1<=MA2_0 && MA1_0>MA2_0) || (MA1_1<MA2_0 && MA1_0>=MA2_0)) // Пересечение снизу вверх { PosOpen=1; } if ((MA1_1>=MA2_0 && MA1_0<MA2_0) || (MA1_1>MA2_0 && MA1_0<=MA2_0)) // Пересечение сверху вниз { PosOpen=2; } return(PosOpen); // Возвращаем направление пересечен. } //============================================================================================ int OpenBuy() { if (total==1) { OrderSelect(0, SELECT_BY_POS,MODE_TRADES); // Выделим ордер if (OrderType()==OP_BUY) return; } OrderSend(Symbol(),OP_BUY, Ask, 0, 0, "Buy", 1, 0, CLR_NONE); // Открываемся return; } //============================================================================================ int OpenSell() { if (total==1) { OrderSelect(0, SELECT_BY_POS,MODE_TRADES); // Выделим ордер if (OrderType()==OP_SELL) return; } OrderSend(Symbol(),OP_SELL, Bid,3, 0, "Sell", 2, 0, CLR_NONE); // Открываемся return; } //============================================================================================ int MAMethod(int MA_Method) { switch(MA_Method) { case 0: return(0); // Возвращает MODE_SMA=0 case 1: return(1); // Возвращает MODE_EMA=1 case 2: return(2); // Возвращает MODE_SMMA=2 case 3: return(3); // Возвращает MODE_LWMA=3 } } //============================================================================================ int MAPrice(int MA_Price) { switch(MA_Price) { case 0: return(PRICE_CLOSE); // Возвращает PRICE_CLOSE=0 case 1: return(PRICE_OPEN); // Возвращает PRICE_OPEN=1 case 2: return(PRICE_HIGH); // Возвращает PRICE_HIGH=2 case 3: return(PRICE_LOW); // Возвращает PRICE_LOW=3 case 4: return(PRICE_MEDIAN); // Возвращает PRICE_MEDIAN=4 case 5: return(PRICE_TYPICAL); // Возвращает PRICE_TYPICAL=5 case 6: return(PRICE_WEIGHTED); // Возвращает PRICE_WEIGHTED=6 } } //============================================================================================ if iAO ,Symbol(), 0, 2; { double ao1,ao2,ao3; if(OrdersTotal()>0) TrailingControl(); { if((Time[0]-last)>=Period()*60) { ao1=iAO(Symbol(),0,StartBar); ao2=iAO(Symbol(),0,StartBar+1); ao3=iAO(Symbol(),0,StartBar+2); last=Time[0]; } } } return(0); int OrderCl(int ord) { int cnt; for(cnt=OrdersTotal();cnt>0;cnt--) { OrderSelect(cnt-1, SELECT_BY_POS, MODE_TRADES); if(OrderType()==OP_BUY && ord==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3,White); if(OrderType()==OP_SELL && ord==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow); } } int TrailingControl() { int total=OrdersTotal(),cnt; for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(Trailing>0) { if(Bid-OrderOpenPrice()>Point*Trailing) { if(OrderStopLoss()<Bid-Point*Trailing) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0); return(0); } } } } else { if(Trailing>0) { if((OrderOpenPrice()-Ask)>(Point*Trailing)) { if(OrderStopLoss()>(Ask+Point*Trailing)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*Trailing,OrderTakeProfit(),0); return(0); } } } } } } }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Уважаемые програмисты!Помогите пожалуйсто Разобраться в этом советнике! иправить ошибки и дописать! У самого ничего не получается мало опыта в MQL, вернее только обучаюсь . Заранее огромное спасибо всем кто поможет новичку! Ведь все мы когда-то с чего-то начинали!