Написание экспертов и индикаторов - бесплатно!
#3256
Отправлено 22 February 2011 - 22:31
Достижение ТП ордеров, а также ручное удаление или закрытие какого-либо ордера на работу советника влиять не должно (то ест, он остальные ордера при этом не трогает).
Спасибо!
 
#3257
Отправлено 22 February 2011 - 22:44
#import "shell32.dll" //Connect a dll (provided with Windows)
int ShellExecuteA(int hwnd,string Operation,string File,string Parameters,string Directory,int ShowCmd);
#import "user32.dll"
int MessageBoxA(int hWnd ,string lpText,string lpCaption,int uType);
#import
extern color OpenColor=Yellow;
extern color TakeProfitColor=Lime;
extern color StopLossColor=Red;
extern bool lShowTargets=true;
extern string _donate1="Для $ благодарностей:";
extern string _donate2="R865705290089";
int cnt=0;
int awh[];
void init()
{
int i=0,j=0;
string n;
CheckDonate();
DeleteHistory();
for(i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && (OrderSymbol()==Symbol()))
{
n=OrderSymbol()+"_"+DoubleToStr(OrderTicket(),0)+"_"+DoubleToStr(Period(),0);
if(ObjectFind(n+"open")==-1)
{ObjectCreate(n+"open",OBJ_HLINE,awh[j],Time[0],OrderOpenPrice()); ObjectSet(n+"open",OBJPROP_COLOR,OpenColor);}
if(OrderStopLoss()!=0 && ObjectFind(n+"stop")==-1)
{ObjectCreate(n+"stop",OBJ_HLINE,awh[j],Time[0],OrderStopLoss()); ObjectSet(n+"stop",OBJPROP_COLOR,StopLossColor);}
if(OrderTakeProfit()!=0 && ObjectFind(n+"take")==-1)
{ObjectCreate(n+"take",OBJ_HLINE,awh[j],Time[0],OrderTakeProfit()); ObjectSet(n+"take",OBJPROP_COLOR,TakeProfitColor);}
}
DeleteLabels();
ShowLabels();
cnt=OrdersTotal();
}
void deinit()
{
string n;
int i=0,j=0;
for(i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && (OrderSymbol()==Symbol()))
{
n=OrderSymbol()+"_"+DoubleToStr(OrderTicket(),0)+"_"+DoubleToStr(Period(),0);
if(ObjectFind(n+"open")!=-1) ObjectDelete(n+"open");
if(ObjectFind(n+"stop")!=-1) ObjectDelete(n+"stop");
if(ObjectFind(n+"take")!=-1) ObjectDelete(n+"take");
}
DeleteHistory();
for(i=0;i<30;i++)
{
ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"topen"+i);
ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"ttake"+i);
ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"tstop"+i);
}
DeleteLabels();
}
void start()
{
string n;
int i=0,j=0;
if(cnt!=OrdersTotal()) init();
DeleteHistory();
DeleteLabels();
double popen, ptake, pstop;
for(i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && (OrderSymbol()==Symbol()))
{
n=OrderSymbol()+"_"+DoubleToStr(OrderTicket(),0)+"_"+DoubleToStr(Period(),0);
if((ObjectFind(n+"stop")==-1) && (OrderStopLoss()!=0))
//if(MessageBox("Убрать стоп лосс?","Убрать?",4)==6)
//{
// OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,CLR_NONE);
// ObjectDelete(n+"stop");
// continue;
//}
//else
{
ObjectCreate(n+"stop",OBJ_HLINE,awh[j],Time[0],OrderStopLoss()); ObjectSet(n+"stop",OBJPROP_COLOR,StopLossColor);
}
if((ObjectFind(n+"take")==-1) && (OrderTakeProfit()!=0))
//if(MessageBox("Убрать тейк профит?","Убрать?",4)==6)
//{
// OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,0,CLR_NONE);
// ObjectDelete(n+"take");
// continue;
//}
//else
{
ObjectCreate(n+"take",OBJ_HLINE,awh[j],Time[0],OrderTakeProfit()); ObjectSet(n+"take",OBJPROP_COLOR,TakeProfitColor);
}
if(ObjectFind(n+"open")==-1)
if(MessageBox("Закрыть ордер "+OrderTicket()+"?","Закрыть?",4)==6)
{
if(OrderType()==OP_BUY) popen=Bid;
if(OrderType()==OP_SELL) popen=Ask;
OrderClose(OrderTicket(),OrderLots(),popen,3,CLR_NONE);
OrderDelete(OrderTicket());
ObjectDelete(n+"take");
ObjectDelete(n+"stop");
continue;
}
else
{
ObjectCreate(n+"open",OBJ_HLINE,awh[j],Time[0],OrderOpenPrice()); ObjectSet(n+"open",OBJPROP_COLOR,OpenColor);
}
popen=NormalizeDouble(ObjectGet(n+"open",OBJPROP_PRICE1),Digits);
ptake=NormalizeDouble(ObjectGet(n+"take",OBJPROP_PRICE1),Digits);
pstop=NormalizeDouble(ObjectGet(n+"stop",OBJPROP_PRICE1),Digits);
//Comment("");
if((popen!=NormalizeDouble(OrderOpenPrice(),Digits)) || (pstop!=NormalizeDouble(OrderStopLoss(),Digits)) || (ptake!=NormalizeDouble(OrderTakeProfit(),Digits)))
{
if((OrderType()!=OP_BUY) && (OrderType()!=OP_SELL) && (NormalizeDouble(popen,Digits)!=NormalizeDouble(OrderOpenPrice(),Digits)))
{
OrderModify(OrderTicket(),popen,OrderStopLoss(),OrderTakeProfit(),0,CLR_NONE);//continue;
}
if(((OrderType()==OP_BUY) || (OrderType()==OP_SELL)) && (NormalizeDouble(popen,Digits)!=NormalizeDouble(OrderOpenPrice(),Digits)))
{
ObjectSet(n+"open",OBJPROP_PRICE1,OrderOpenPrice());//continue;
}
if((OrderType()==OP_BUY) && (NormalizeDouble(pstop,Digits)>Bid))
{
ObjectSet(n+"stop",OBJPROP_PRICE1,OrderStopLoss());//continue;
}
if((OrderType()==OP_SELL) && (NormalizeDouble(pstop,Digits)<Ask))
{
ObjectSet(n+"stop",OBJPROP_PRICE1,OrderStopLoss());//continue;
}
if((NormalizeDouble(ptake,Digits)!=NormalizeDouble(OrderTakeProfit(),Digits)) && (OrderTakeProfit()!=0) && (ptake!=0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),ptake,0,CLR_NONE);//continue;
}
if((NormalizeDouble(pstop,Digits)!=NormalizeDouble(OrderStopLoss(),Digits)) && (OrderStopLoss()!=0) && (pstop!=0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),pstop,OrderTakeProfit(),0,CLR_NONE);//continue;
}
}
}
ShowLabels();
if(lShowTargets) fShowTargets();
WindowRedraw();
}
void DeleteHistory()
{
string n;
int i=0,j=0;
for(i=0;i<OrdersHistoryTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderSymbol()==Symbol()))
{
n=OrderSymbol()+"_"+DoubleToStr(OrderTicket(),0)+"_"+DoubleToStr(Period(),0);
if(ObjectFind(n+"open")!=-1) ObjectDelete(n+"open");
if(ObjectFind(n+"stop")!=-1) ObjectDelete(n+"stop");
if(ObjectFind(n+"take")!=-1) ObjectDelete(n+"take");
}
}
void fShowTargets()
{
int i=0, prof_pts=0, ticket=0;
double dist_stop_pts, dist_stop;
double dist_take_pts, dist_take;
double pr=(Ask+Bid)/2, prof=0;
datetime CT=Time[0]+Period()*60*(WindowBarsPerChart()/20+2); // time shift
double CP=5*Point; // price shift
int FS=10; // font size
color prof_clr=Blue;
string txt="";
//-------------------------------------------------------------
for(i=0;i<10;i++)
{
ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"topen"+i);
ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"ttake"+i);
ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"tstop"+i);
}
for(i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
// <---считаем
RefreshRates();
prof=OrderProfit();
if(OrderType()==OP_BUY || OrderType()==3 || OrderType()==4)
{
pr=Bid;
prof_pts=pr/Point-OrderOpenPrice()/Point;
}
if(OrderType()==OP_SELL || OrderType()==2 || OrderType()==5)
{
pr=Ask;
prof_pts=OrderOpenPrice()/Point-pr/Point;
}
prof_clr=Blue;
if(prof_pts<0) prof_clr=Red;
if(prof_pts>0) prof_clr=Green;
ObjectCreate(Symbol()+DoubleToStr(Period(),0)+"topen"+i,OBJ_TEXT,0,CT,OrderOpenPrice()+CP);
txt="";
if(OrderType()==0 || OrderType()==1) txt=" ("+DoubleToStr(MathAbs(prof),2)+"$)";
ObjectSetText(Symbol()+DoubleToStr(Period(),0)+"topen"+i,DoubleToStr(MathAbs(prof_pts),0)+txt,FS,"Arial",prof_clr);
dist_take_pts=0;dist_take=0;
if(OrderTakeProfit()!=0)
{
dist_take_pts=MathAbs(pr/Point-OrderTakeProfit()/Point);
txt=DoubleToStr(dist_take_pts,0);
dist_take_pts=MathAbs(OrderOpenPrice()/Point-OrderTakeProfit()/Point);
txt=txt+"("+DoubleToStr(dist_take_pts,0)+"/"+DoubleToStr(dist_take_pts*OrderLots()*10,0)+"$)";
ObjectCreate(Symbol()+DoubleToStr(Period(),0)+"ttake"+i,OBJ_TEXT,0,CT,OrderTakeProfit()+CP);
ObjectSetText(Symbol()+DoubleToStr(Period(),0)+"ttake"+i,txt,FS,"Arial",Green);
}
dist_stop_pts=0;dist_stop=0;
if(OrderStopLoss()!=0)
{
dist_stop_pts=MathAbs(pr/Point-OrderStopLoss()/Point);
txt=DoubleToStr(dist_stop_pts,0);
dist_stop_pts=MathAbs(OrderOpenPrice()/Point-OrderStopLoss()/Point);
txt=txt+"("+DoubleToStr(dist_stop_pts,0)+"/"+DoubleToStr(dist_stop_pts*OrderLots()*10,0)+"$)";
ObjectCreate(Symbol()+DoubleToStr(Period(),0)+"tstop"+i,OBJ_TEXT,0,CT,OrderStopLoss()+CP);
ObjectSetText(Symbol()+DoubleToStr(Period(),0)+"tstop"+i,txt,FS,"Arial",Red);
}
// рисуем--->
}
}
void DeleteLabels()
{
int i=0;
string n="";
int t=Time[WindowFirstVisibleBar()];
for(i=0;i<OrdersHistoryTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol())
{
n=OrderSymbol()+Period()+DoubleToStr(OrderTicket(),0);
ObjectDelete(n+"stoplbl");
ObjectDelete(n+"takelbl");
}
for(i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol())
{
n=OrderSymbol()+Period()+DoubleToStr(OrderTicket(),0);
ObjectDelete(n+"stoplbl");
ObjectDelete(n+"takelbl");
}
}
void ShowLabels()
{
int i=0;
string n="";
int t=Time[WindowFirstVisibleBar()-(WindowBarsPerChart()/20)];
//Comment(WindowBarsPerChart());
for(i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol())
{
n=OrderSymbol()+Period()+DoubleToStr(OrderTicket(),0);
ObjectDelete(n+"stoplbl");
ObjectCreate(n+"stoplbl",OBJ_TEXT,0,t,OrderStopLoss());
ObjectSetText(n+"stoplbl","#"+DoubleToStr(OrderTicket(),0)+" stop",8,"Arial",StopLossColor);
ObjectDelete(n+"takelbl");
ObjectCreate(n+"takelbl",OBJ_TEXT,0,t,OrderTakeProfit());
ObjectSetText(n+"takelbl","#"+DoubleToStr(OrderTicket(),0)+" take",8,"Arial",TakeProfitColor);
}
}
void CheckDonate()
{
int fd=0; string pay="0"; datetime dt=0;
string fn="VisualTrading.txt";
fd=FileOpen(fn,FILE_READ|FILE_CSV,";");
if(fd>=1)
{
pay=FileReadString(fd); if(pay!="0" && pay!="1") pay="0";
dt=StrToTime(FileReadString(fd));
}
else
{
dt=TimeCurrent();
fd=FileOpen(fn,FILE_WRITE|FILE_CSV,";");
FileWrite(fd,"0",TimeToStr(dt,TIME_DATE));
}
FileClose(fd);
if(pay=="0" && (TimeCurrent()-dt)>10*24*60*60) // 5 дней
{
if(MessageBoxA(0,"Если Вам понравился советник VisualTrading,\n хотите помочь автору материально?","Вопрос",4)==6)
{
ShellExecuteA(0,"Open","iexplore.exe","wmk:payto?Purse=R865705290089&Amount=100&Desc=VisualTrading&BringToFront=Y&ExecEvenKeeperIsOffline=Y","",7);
pay="1";
}
dt=TimeCurrent();
fd=FileOpen(fn,FILE_WRITE|FILE_CSV,";");
FileWrite(fd,pay,TimeToStr(dt,TIME_DATE));
FileClose(fd);
}
FileClose(fd);
}
#3258
Отправлено 22 February 2011 - 23:44
он пипсовщик?А мой вот так торгует.. на центовом реале. Решил продать пару копий, потому что нет денег на нормальный депозит.Кому нужен настоящий грааль, пишите в личку.
какого размера сделки бывают в пипсах?
#3259
Отправлено 23 February 2011 - 00:23
- Michelangelo®, sd555, Шурагон и еще 1 это нравится
« Так же как сценаристы вводят зрителей в заблуждение, так же и
манипуляторы сбивают с толку и влияют на толпу, чтобы заставить их думать, что
рынок движется в каком-то направлении, хотя их цель заставить двигаться рынок в
противоположном».
СВЯТАЯ РУСЬ БЫЛА, ЕСТЬ и БУДЕТ во ВЕКИ ВЕКОВ!!!
#3260
Отправлено 23 February 2011 - 14:15
Помогите сделать советник по следующему алгаритму:
Индикаторы:
1. Moving Averade:
T=14, Сдвиг=0, Метод МА-Simple, Применить к Close;
2. Bolinger Bands:
T=10, Сдвиг=0, Отклонение-2, Применить к Close;
3. MACD:
Быстрый EMA-12, Медленный EMA-26, MACD SMA-9, Применить к Close;
4. Average Directional Movement Index:
T=14, Применить к Close, +ID, -ID;
5. Relative Strength Index:
T=14, Применить к Close, min=0, max=100, Уроввни 30 и 70.
Кол-во отрытых ордеров до 10.
Закрытие открытых ордеров через 72 часа.
Открытие позиции на Покупку:
1. Relative Strength Index проходит уровень <=30;
2. 30<=Relative Strength Index<=65;
3. MACD имеет отрицательное значение, которое уменьшается по модулю;
4. Average Directional Movement Index :+ID пересекает -ID снизу вверх;
5. Средняя линия Bolinger Bands пересекает Moving Averade снизу вверх.
Закрытие позиции на Покупку:
1. Средняя линия Bolinger Bands пересекает Moving Averade сверху вниз.
Открытие позиции на Продажу:
1. Relative Strength Index проходит уровень >=70;
2. 70>=Relative Strength Index>=35;
3. MACD имеет положительное значение, которое уменьшается;
4. Average Directional Movement Index :+ID пересекает -ID сверху вниз;
5. Средняя линия Bolinger Bands пересекает Moving Averade сверху вниз.
Закрытие позиции на Продажу:
1..Средняя линия Bolinger Bands пересекает Moving Averade снизу вверх.
Заранее благодарен.
#3261
Отправлено 24 February 2011 - 01:05
он пипсовщик?
какого размера сделки бывают в пипсах?
нет . он не пипсовщик,он контр трендовый. размеры профита задаваемые(очень много настроек)., но я даю фиксированый ТП 5% к депо, и все сначала..
#3262
Отправлено 24 February 2011 - 01:36
Огромное спасибо!!!Вот здесь коды ошибок с пояснениями
#3263
Отправлено 24 February 2011 - 08:21
На разных парах, и таймфлеймах в определенное время, замечена следующая закономерность. При закрытии определенного количества бычих свечей, проходит серия из двух-трех противоположных свечей. Для серии медвежих свечей тож своя закономерность присутствует.
1. Так мысль в том чтоб при закрытии N-ого количества свечей (бычих или медвежих) открывать ордер в обратную сторону. (количество свечей в серии настраеваемое)
2. В советнике должен присутствовать меджик (чтоб можно было выставлять с разными настройками для бая и села)
3. Так же должен присутствовать фильтр открытия и закрытия сделок, тоесть точное время начала работы и конец работы советника (сесии 3-4 думаю будет достаточно). По завершении временного промежутка торговой сесии открытые сделки должны закрываться. Во время торговой сесии срабатывает не более одного ордера. (необходимо чтоб можно было полностью отключать сесии, и оставлять только одну сесию) настраиваться должны часы и минуты.
4. Необходима возможность выставления стопов и профитов.
5. трелинг приветствуется.
6. Необходим фильтр работы по дням недели (чтоб можно было отключать работу в понедельник и в пятницу)настройка отдельная.
И так, можно ли создать такого советника???
И главное забыл.
В советнике должна быть реализована функция: если следит и отсчитывает закрытые свечи медвежьи то открывает ордера бай и после переключения наоборот, следит и считает закрытые бычьи свечи то открывает ордера на сел.
Сообщение отредактировал andcam: 24 February 2011 - 08:48
#3264
Отправлено 24 February 2011 - 10:03
А если есть время, то сделайте, чтобы с сигналом открывалась сделка с выбираемыми профитом и стопом (по умолчанию 10, 30).
При смене тренда убыточные сделки закрываются или остаются (на выбор трейдера).
Спасибо.
Прикрепленные файлы
#3265
Отправлено 24 February 2011 - 23:55
Добрый день! Есть просьба дополнить Ilan1.6Dynamic трендовыми фильтрами для препятствия открытию позиций против устойчивого тренда (по индикаторам OsMA, PSAR, ADX или подобные) с последующей блокировкой торговли советника, тем самым дать ему торговать только в боковиках! Заранее спасибо!
Прикрепленные файлы
#3266
Отправлено 25 February 2011 - 01:49
Спасибо заранее.
#3267
Отправлено 25 February 2011 - 17:47
Просьба к программистам, напишите пожалуйста индикаторы с помощью которого можно было бы построить квадрат, круг и равнобедренный треугольник. Параметры этих фигур можно было бы задать самому.
Спасибо заранее.
Я не программист, извиняюсь, что встреваю, но не удобнее ли навыки рисования совершенствовать на Paintе. Для начертательной геометрии, скажем, программа Intergraph гораздо удобнее терминала МТ4...
Чисто математически, для рисования идеальных плоских фигур нужны две однодименсные декартовы координатные оси. Как Вы думаете использовать оси координат терминала МТ, когда временная ось даже нелинейна (выходные неотображаются)?
- Michelangelo®, valenok2003 и Olej это нравится
#3268
Отправлено 25 February 2011 - 19:17
Как Вы думаете использовать оси координат терминала МТ, когда временная ось даже нелинейна (выходные неотображаются)?
Смешно
#3269
Отправлено 25 February 2011 - 23:33
#3270
Отправлено 26 February 2011 - 00:32
я не знаю как вы, но я думаю что движения на рынке неслучайны, а круг, квадрат и треугольник являются самыми идеальными простые фигуры которые встречаются в природе, и график цен это всего лишь колебания цены во времени, и думаю с помощью математики и геометрий лучше можно спрогнозировать поведение цены, чем использования индикаторов которые рассчитаны на прошлых данных цены и отражают то что лучилось а не то что будет и каждый имеет свою интерпретацию индикатора и видит то что хочет а не то что есть на самом деле. Математика это неоспоримая наука, все на нашей планете построена на математических принципах.
Да ради Бога! Отчасти я даже разделяю Вашу точку зрения: рано или поздно докапаетесь и до Золотого сечения, и до соотношений Фибоначчи, и, возможно, до квадрата Гана...
Только вряд ли Вам удастся реализовать свои идеи на МТ4. Для подобных затей лучше таблиц Excelя с их скромными графическими возможностями пока ненашел...
К стати, знатоки MQLа! Нет ли какой лазейки, чтобы временную ось МТ4 всё же отображать непрерывной?