Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Для того чтобы набраться опыта в данной сфере, напишу 25 советников бесплатно под ваши интересные идеи и стратегии
Осталось 19 советников
У меня такая проблема, советник уже есть и работает хорошо, проблема с блоком трейлинг-стоп. Он почему-то не работает, не выставляется при торгах. Вот сам советник. Может есть идеи что с трейлингом? А то как-то не то пальто без этого.
Ishimoku - MACD.mq4 |
//| TO |
//| http://www.forex-tradexperts-to.narod.ru |
//+------------------------------------------------------------------+
#property copyright "TO"
#property link "http://www.forex-tradexperts-to.narod.ru"
#include <WinUser32.mqh>
extern string Параметры=" Ichimoku";
extern int tenkan_sen=3;
extern int kijun_sen=48;
extern int senkou_span_b=52;
extern string Парaметры=" Moving Average";
extern int MaPeriod=4;
extern int ma_method=1;
extern int applied_price=3;
extern string Пaраметры=" MACD";
extern int FastEMA=22;
extern int SlowEMA=52;
extern int SignalEMA=9;
extern string Пapаметры=" Советника";
extern int TP=200;
extern int SL=500;
extern int slippage=3;
extern double lot=0.1;
extern bool Добавление1/*(TENKANSEN перес. KIJUNSEN)*/ =true;
extern bool Добавление2/*(TENKANSEN перес. Ma)*/=true;
extern bool trailing=true;
extern double trailingStop=200;
extern int zashita=1;
bool buy1=false,buy2=false,buy3=false,buy4=false;
bool sell1=false,sell2=false,sell3=false,sell4=false,sell22=false,buy22=false;
int ticket=0;
int i;
datetime t1=0,t2=1,t3=1,t4=1,t5=1,t7=1,t8=1;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
int start()
{
t1=Time[0];
double MACDRED1=iMACD(NULL,0,FastEMA,SlowEMA,SignalEMA,PRICE_CLOSE,MODE_MAIN,1);
double MACDRED2=iMACD(NULL,0,FastEMA,SlowEMA,SignalEMA,PRICE_CLOSE,MODE_MAIN,2);
double MACDBLUE1=iMACD(NULL,0,FastEMA,SlowEMA,SignalEMA,PRICE_CLOSE,MODE_SIGNAL,1);
double MACDBLUE2=iMACD(NULL,0,FastEMA,SlowEMA,SignalEMA,PRICE_CLOSE,MODE_SIGNAL,2);
double IshRed1=iIchimoku(NULL,0,tenkan_sen,kijun_sen,senkou_span_b,MODE_TENKANSEN,1);
double IshRed2=iIchimoku(NULL,0,tenkan_sen,kijun_sen,senkou_span_b,MODE_TENKANSEN,2);
double IshBlue1=iIchimoku(NULL,0,tenkan_sen,kijun_sen,senkou_span_b,MODE_KIJUNSEN,1);
double IshBlue2=iIchimoku(NULL,0,tenkan_sen,kijun_sen,senkou_span_b,MODE_KIJUNSEN,2);
double MA1=iMA(NULL,0,MaPeriod,0,ma_method,applied_price,1);
double MA2=iMA(NULL,0,MaPeriod,0,ma_method,applied_price,2);
if(MACDRED1>MACDBLUE1 && MACDRED2<MACDBLUE2 && t3!=t1)
{ // Сигнал на MACD BUY
buy1=true;sell1=false;t3=Time[0];
}
if(MACDRED1<MACDBLUE1 && MACDRED2>MACDBLUE2 && t3!=t1)
{ // Сигнал на MACD SELL
sell1=true;buy1=false;t3=Time[0];
}
if(IshRed1>MA1 && IshRed2<=MA2 && t4!=t1)
{ // Сигнал на Ишимоку Быстрая пересекает МА на BUY
buy2=true;sell2=false;t4=Time[0];
}
if(IshRed1<MA1 && IshRed2>=MA2 && t4!=t1)
{ // Сигнал на Ишимоку Быстрая пересекает МА на SELL
sell2=true;buy2=false;t4=Time[0];
}
if(IshRed1>IshBlue1 && IshRed2<IshBlue2 && t5!=t1)
{ // Сигнал на Ишимоку Быстрая пересекает Медленную на BUY
buy3=true;sell3=false;t5=Time[0];
}
if(IshRed1<IshBlue1 && IshRed2>IshBlue2 && t5!=t1)
{ // Сигнал на Ишимоку Быстрая пересекает Медленную на SELL
sell3=true;buy3=false;t5=Time[0];
}
if(Добавление1==true && buy3==true && buy4==true && t1!=t8)
{ //открытие добавлений
PlaySound("Alert.wav");
int ret=MessageBox("Добавить ордер на Buy?","Вопрос",MB_YESNO|MB_ICONQUESTION);
if(ret==6){ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,slippage,Bid-SL*Point,Ask+TP*Point,NULL,0,0,Blue);if(ticket>0)PlaySound("ok.wav");if(ticket<0)Alert("Ордер не установлен!!! ошибка - "+GetLastError()+"установите вручную");}
t8=Time[0];buy3=false;buy4=false;
}
if(Добавление1==true && sell3==true && sell4==true && t1!=t7)
{ //открытие добавлений
PlaySound("Alert.wav");
int ret2=MessageBox("Добавить ордер на Sell?","Вопрос",MB_YESNO|MB_ICONQUESTION);
if(ret2==6){ticket=OrderSend(Symbol(),OP_SELL,lot,Bid,slippage,Ask-SL*Point,Bid+TP*Point,NULL,0,0,Red);if(ticket>0)PlaySound("ok.wav");if(ticket<0)Alert("Ордер не установлен!!! ошибка - "+GetLastError()+"установите вручную");}
t7=Time[0];sell3=false;sell4=false;
}
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{
buy1=false;buy2=false;buy22=true;
break;
}
}
if(Добавление2==true && buy22 && IshRed1>MA1 && IshRed2<=MA2 && t4!=t1)
{ // Добавление по Ма и Тенкан_сэн на Buy
PlaySound("Alert.wav");
int ret3=MessageBox("Добавить ордер на Buy?","Вопрос",MB_YESNO|MB_ICONQUESTION);
if(ret3==6){ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,slippage,Bid-SL*Point,Ask+TP*Point,NULL,0,0,Blue);if(ticket>0)PlaySound("ok.wav");if(ticket<0)Alert("Ордер не установлен!!! ошибка - "+GetLastError()+"установите вручную");}
t4=Time[0];buy22=false;
}
if(Добавление2==true && sell22 && IshRed1<MA1 && IshRed2>=MA2 && t4!=t1)
{ // Добавление по Ма и Тенкан_сэн на Sell
PlaySound("Alert.wav");
int ret4=MessageBox("Добавить ордер на Sell?","Вопрос",MB_YESNO|MB_ICONQUESTION);
if(ret4==6){ticket=OrderSend(Symbol(),OP_SELL,lot,Bid,slippage,Ask-SL*Point,Bid+TP*Point,NULL,0,0,Red);if(ticket>0)PlaySound("ok.wav");if(ticket<0)Alert("Ордер не установлен!!! ошибка - "+GetLastError()+"установите вручную");}
t4=Time[0];sell22=false;
}
if(buy1==true && buy2==true && t1!=t2)
{ //открытие первоначальных ордеров
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Gold);
}
PlaySound("Alert.wav");
ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,slippage,Bid-SL*Point,Ask+TP*Point,NULL,0,0,Blue);
if(ticket>0)PlaySound("ok.wav");
if(ticket<0)Alert("Ордер не установлен!!! ошибка - "+GetLastError()+"установите вручную");
t2=Time[0];buy1=false;buy2=false;buy4=true;
}
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_SELL)
{
sell1=false;sell2=false;sell22=true;
break;
}
}
if(sell1==true && sell2==true && t1!=t2)
{ //открытие первоначальных ордеров
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Gold);
}
PlaySound("Alert.wav");
ticket=OrderSend(Symbol(),OP_SELL,lot,Bid,slippage,Ask+SL*Point,Bid-TP*Point,NULL,0,0,Red);
if(ticket>0)PlaySound("ok.wav");
if(ticket<0)Alert("Ордер не установлен!!! ошибка - "+GetLastError()+"установите вручную");
t2=Time[0];sell1=false;sell2=false;sell4=true;buy22=false;
}
//Trailing stop
double SL,TP,openprice,profit;
int ticketOrder,zamok,type;
string comm;
for(i=OrdersTotal();i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(trailing==true && OrderProfit()/MarketInfo(Symbol(),MODE_TICKVALUE)>0 && MathFloor(OrderProfit()/MarketInfo(Symbol(),MODE_TICKVALUE)/trailingStop)!=0 && (OrderProfit()/MarketInfo(Symbol(),MODE_TICKVALUE))>=trailingStop*MathFloor(OrderProfit()/MarketInfo(Symbol(),MODE_TICKVALUE)/trailingStop))
{
if(OrderType()==0){SL=Bid-trailingStop*Point;if(SL==OrderOpenPrice())SL+=zashita*Point;}
if(OrderType()==1){SL=Ask+trailingStop*Point;if(SL==OrderOpenPrice())SL-=zashita*Point;}
TP=OrderTakeProfit();
if(OrderType()==0)if(SL>=OrderStopLoss()+trailingStop*Point)OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0);
if(OrderType()==1)if(SL<=OrderStopLoss()-trailingStop*Point)OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0);
}
}
return(0);
}
На все не отвечу, но это точно косяк:
Последний ордер - ордер OrdersTotal()-1.
мультисоветник можете написать/дописать бесплатно?
болванка есть.
Здравствуйте, с уважением к вам ,прошу вас кто поможет прописать в советнике T/P и Magic_Number. С уважением к вам Тимофей.
Доброго времени суток
а как бы вы написали такой кусок?
double a; //
double b; // как а так и б могут принимать абсолютно любые значения: числа, показания индикаторов, количество тиков за 500 свечей и т д.
double X; // величина отклонения +-Х
if
(a+x и a-x) попадает в поле значений (b+x и b-x)
{действие}
else
{return 0}
Доброго времени суток
а как бы вы написали такой кусок?
double a; //
double b; // как а так и б могут принимать абсолютно любые значения: числа, показания индикаторов, количество тиков за 500 свечей и т д.
double X; // величина отклонения +-Х
if
(a+x и a-x) попадает в поле значений (b+x и b-x)
{действие}
else
{return 0}
Если х во всех случаях - одинаковая величина, то Вы, по сути, сравниваете два числа a и b. Ни про какое попадание в интервал тут речи быть не может.
Например, возьмем а = 10, b = 11. Т.е. Вы хотите, чтобы интервал от 12 до 8 попал в интервал от 13 до 9?
Если х во всех случаях - одинаковая величина, то Вы, по сути, сравниваете два числа a и b. Ни про какое попадание в интервал тут речи быть не может.
Например, возьмем а = 10, b = 11. Т.е. Вы хотите, чтобы интервал от 12 до 8 попал в интервал от 13 до 9?
Все правильно