Вот такую штуку увидел - OrderProfit()>=DesirePips*Point
Это неправильно OrderProfit() в деньгах исчисляется.
Все остальное решаеются при помощи магика. В советнике делаешь
три переменных Magic_1...2...3 Советник открывает свои ордера с Magic_1,
один скрипт с Magic_2, другой скрипт с Magic_3.
Чтобы советник отличал ордера в цикле перебирающем все ордера
делается проверка
if(OrderMagicNumber()==Magic_1) - сделать что-то
if(OrderMagicNumber()==Magic_2) - сделать что-то другое
if(OrderMagicNumber()==Magic_3) - сделать еще что-то
рефреш не помешает перед OrdeClose() и при открытии перед расчетом
сл, тп и OrderSend(), но он там есть
Вообще-то если за пипсами охотиться, то рефреш перед проверкой
условия делать, а то условие выполниться, а цена ихзменится
после рефреша
Значит вместо OrderProfit()>=DesirePips*Point делаем типа OrderProfit()>=DesirePips*Price1Pip где Price1Pip вычисленная стоимость 1 п.
Кстати, а Клозер у меня работал нормально :) поскольку у европейских валют при "по маленькой" - 1п=1уй (примерно :). Я при проверке и не заметил, что что-то не так.
По поводу магии: нашел, куда ставить
ticket=OrderSend(Symbol(),OP_BUY,Stake, NormalizeDouble(MarketInfo(Symbol(),MODE_ASK),Dgts), Slippage, NormalizeDouble(SL,Dgts), NormalizeDouble(TP,Dgts), "",123456789,0,CLR_NONE);Вопрос - для каждой позы нужен свой "магик" или можно "один для всех"? открываемых скриптом.
Вопрос 2 - Если скрипт открывает не позу, а ордер BuyStop, после того как ордер превратится в открытую позицию, его "магик" изменится?
- идентификатор кода
- идентификатор условия открытия ордера
- идентификатор тайм-фрейма
и так далее
По второму - однажды присвоенный MagicNumber стается неизменным, даже если ордер был переоткрыт сервером там, где не начисляются свопы, а производятся переоткрытия.
Первое спасибо!
Значит вместо OrderProfit()>=DesirePips*Point делаем типа OrderProfit()>=DesirePips*Price1Pip где Price1Pip вычисленная стоимость 1 п.
To Rosh: Спасибо, понял: был BuyStop c Магиком, после пробоя будет открытая поза с тем же Магиком. Оч приятно.
Про дробность номера уже прикидывал, но оставил "на потом". Пока могу отслеживать только одну пару, не актуально, но ... задел сделаю.
Кстати - приятного индюка выложили (Spearman), спасибо. Я слепил Fan-текстовика по-быстрому, вставил в канализатор на Н1 и Н4. Может идея пригадится кому из скальпирующих - хорошо видно попадание в зоны откатов на разных ТФ.
//+------------+-----------------------------------------------------+ //| v.04.03.07 | FanRS_txt.mq4 | //+------------+ Spearman, | //| | Rosh | //| | И примазавшийся к ним | //| | Bookkeeper, 2007, yuzefovich@gmail.com | //+------------+-----------------------------------------------------+ #property copyright "" #property link "" //---- //#property indicator_separate_window #property indicator_chart_window #property copyright "" #property link "" /********************************************************************/ extern string Prefix = "FanRS"; extern int rangeN=14; extern int CalculatedBars=100; extern int Maxrange=30; /********************************************************************/ string FontName="Courier New"; int FontSize=10; bool First=true; int prevBars=0; string GlobName; string RowName[4] = { "Rosh-Spearman M5", "Rosh-Spearman M15", "Rosh-Spearman H1", "Rosh-Spearman H4" }; /********************************************************************/ string LabelName(int i) { return(GlobName+"TxtLbl_"+i); } /********************************************************************/ void UpdateTxtInLabel(int i, string p, double d, color c) { double a; a=NormalizeDouble(d*100,1); string s=p+" "; if(MathAbs(d)<10) s=s+" "; if(d>0) s=s+"+"; s=s+DoubleToStr(a,1); ObjectSetText(LabelName(i), s, FontSize, FontName, c); return; } /********************************************************************/ void deinit() { int N,i; string SStr,NO; N=ObjectsTotal(); for(i=N;i>=0;i--) { NO=ObjectName(i); SStr=StringSubstr(NO,0,StringLen(GlobName)); if(SStr==GlobName) ObjectDelete(NO); } return; } /********************************************************************/ void init() { string s; GlobName=Prefix+"_"+Symbol()+"_"+Period()+"_"; for(int j=0; j<5; j++) { s=LabelName(j); ObjectCreate (s,OBJ_LABEL,0,0,0); ObjectSet (s,OBJPROP_XDISTANCE,5*FontSize/10); ObjectSet (s,OBJPROP_YDISTANCE,j*16*FontSize/10+3*FontSize/10); ObjectSet (s,OBJPROP_CORNER,1); ObjectSet (s,OBJPROP_BACK,false); ObjectSetText(s," ",FontSize,FontName,Black); } ObjectSetText(LabelName(0),"Fan Rosh-Spearman",FontSize,FontName,Black); return; } /********************************************************************/ void start() { double prevRS5, prevRS15, prevRS60, prevRS240; double RS5, RS15, RS60, RS240; color t, r=Red, g=Green, b=Blue; RS5=iCustom(NULL,PERIOD_M5,"SpearmanRankCorr", rangeN,CalculatedBars,Maxrange,0,0); prevRS5=iCustom(NULL,PERIOD_M5,"SpearmanRankCorr", rangeN,CalculatedBars,Maxrange,0,1); t=b; if(RS5>prevRS5) t=g; if(RS5<prevRS5) t=r; UpdateTxtInLabel(1,"M5 ",RS5,t); RS15=iCustom(NULL,PERIOD_M15,"SpearmanRankCorr", rangeN,CalculatedBars,Maxrange,0,0); prevRS15=iCustom(NULL,PERIOD_M15,"SpearmanRankCorr", rangeN,CalculatedBars,Maxrange,0,1); t=b; if(RS15>prevRS15) t=g; if(RS15<prevRS15) t=r; UpdateTxtInLabel(2,"M15",RS15,t); RS60=iCustom(NULL,PERIOD_H1,"SpearmanRankCorr", rangeN,CalculatedBars,Maxrange,0,0); prevRS60=iCustom(NULL,PERIOD_H1,"SpearmanRankCorr", rangeN,CalculatedBars,Maxrange,0,1); t=b; if(RS60>prevRS60) t=g; if(RS60<prevRS60) t=r; UpdateTxtInLabel(3,"H1 ",RS60,t); RS240=iCustom(NULL,PERIOD_H4,"SpearmanRankCorr", rangeN,CalculatedBars,Maxrange,0,0); prevRS240=iCustom(NULL,PERIOD_H4,"SpearmanRankCorr", rangeN,CalculatedBars,Maxrange,0,1); t=b; if(RS240>prevRS240) t=g; if(RS240<prevRS240) t=r; UpdateTxtInLabel(4,"H4 ",RS240,t); return; }За код извиняюсь - думал не сильно.
Но помогает не мельтишить, не переключаться излишне между окнами.
И вообще, если кто не обратил еще внимания на индюшку - по-моему стоит (особенно собратьям-Чайникам, очень логично и понятно).
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Поскольку эти уровни возникают достаточно редко, можно как-то автоматизировать:
1. Пишем советник, который закрывает прибыльные позы (кстати - рефреш куда-нибудь вставлять надо?):
2. Первый вариант (не очень интересный): пишем скрипт на открытие позы:
И первый вопрос: можно ли что-то добавить в скрипт и в советник, чтоб советник закрывал только позы, открытые этим скриптом? и проходил мимо остальных.
И второй вопрос (вариант более интересный): можно ли написать скрипт на открытие Stop-ордера так, чтоб советник закрывал только позы, открытые после пробоя именно этих ордеров? и проходил мимо остальных.Звиняйте за обилие кода - я не программист и мне надо, чтоб если чего не знаю, первый раз показали пальцем конкретно: это впиши сюда, а это туда. А не объясняли на словах :).