skyjet: Здравствуйте! Подскажите, как научить советник определять фракталы?
Вопрос бы по подробнее. Есть же куча разных индюков, который умеют рисовать и находить фракталы. Советнику их определять не нужно. Берёшь индюк и из буферов индюка цепляешь значения того или иного фрактала. Ничего сложного, если уделить внимание этому вопросу.
Доброго дня! Пацаны, подскажите по такому вопросу: В тестере эксп открывает ордера согласно алгоритма и схемы увеличения размера канала последующих усреднений - это видно на картинке - каждое последующее усреднение открывается на бОльшем удалении от предыдущего (как в Илане). Но при этом в принте выдаются такие значения выражений, что усреднения происходить не должны, т.к. условия на их о открытия не выполняются 25 никак не больше 2856, 2197, 1690. Как вообще он заходит в это условие и открывает позиции? Я решил всё скобками фигурными обложить - не помогает...
Тест по ценам открытия. Вот код и картинка:
...
// Внешние переменные (оптимизируются)externstring A1 = " Параметры ММ ";
externdouble Lots = 0.02; // Стартовый лот//------------------- externdouble LotExponent = 2.7; // на сколько умножать стартовый лот в степени - схема по Илану externstring A2 = " В настоящих пипсах ";
externint StopLossPips_BUY = 100; // уровень стартового усреднения в бай объёма позиции в пипсах // Увеличение шага усреднений по схемеexterndouble PipStepExponent_BUY = 1.3; // на сколько умножать стартовый шаг в степени//-----------------------------------------------------------------------
.....
// если стартовая открыта и достигнут уровень усреднения, то усреднить на Lots * MathPow(LotExponent,NumberOfPositions(Symbol(), -1, MN_L)); if (NumberOfPositions(Symbol(), -1, MN_L)>=1 &&
GetProfitOpenPosInCurrency(Symbol(), -1, MN_L)<0)
// if (MathAbs (GetProfitOpenPosInPoint(Symbol(), -1, MN_L)) > StopLossPips)
{
if (GetTypeLastOpenPos(Symbol(), MN_L)==OP_BUY)
if (MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L)<0) // надо ли усреднять
{
if (NumberOfPositions(Symbol(), -1, MN_L)==1)
{// при первом усреднении, усреднять через стартовое количество пунктов - StopLossPips_BUYif ( NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0)>StopLossPips_BUY)
{WmOrderSend(Symbol(), OP_BUY, NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " первое усреднение вверх ", MN_L);
Print (" первое усреднение ");
}
}
if (NumberOfPositions(Symbol(), -1, MN_L)>1) // при последующих - усреднять через MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))
{
if ( NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0) >
NormalizeDouble((StopLossPips_BUY* MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1)),0))
{
WmOrderSend(Symbol(), OP_BUY, NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " усреднение вверх ", MN_L);
Print (" последующие, если это больше ", NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0),
" этого, то открыть бай ", NormalizeDouble(StopLossPips_BUY*MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1),0));
}
}
}
if (GetTypeLastOpenPos(Symbol(), MN_L)==OP_SELL)
if ((PriceOpenLastPos(Symbol(), OP_SELL, MN_L)-MarketInfo(OrderSymbol(), MODE_ASK))<0)
if (NumberOfPositions(Symbol(), -1, MN_L)==1)
{
if (NormalizeDouble((MathAbs(PriceOpenLastPos(Symbol(), OP_SELL, MN_L)-MarketInfo(OrderSymbol(), MODE_ASK))/Point),0)>StopLossPips_SELL)
WmOrderSend(Symbol(), OP_SELL, NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_SELL,MN_L))),Bid, 0, TP_START_SELL, " усреднение вниз ", MN_L);
}
}
.....
Доброго дня! Пацаны, подскажите по такому вопросу: В тестере эксп открывает ордера согласно алгоритма и схемы увеличения размера канала последующих усреднений - это видно на картинке - каждое последующее усреднение открывается на бОльшем удалении от предыдущего (как в Илане). Но при этом в принте выдаются такие значения выражений, что усреднения происходить не должны, т.к. условия на их о открытия не выполняются 25 никак не больше 2856, 2197, 1690. Как вообще он заходит в это условие и открывает позиции? Я решил всё скобками фигурными обложить - не помогает...
Тест по ценам открытия. Вот код и картинка:
Как я понимаю, не видя всего кода и не изучив как он работает тут, навряд ли, кто-то подскажет. Все функции, используемые в данном блоке известны лишь Вам. Лучше всего принтовать по ходу всё и следить за выдачей сообщений.
Как я понимаю, не видя всего кода и не изучив как он работает тут, навряд ли, кто-то подскажет. Все функции, используемые в данном блоке известны лишь Вам. Лучше всего принтовать по ходу всё и следить за выдачей сообщений.
Все ф-ии работают исправно - это ф-ии Ким И.В. "Только полезные ф-ии от Ким И.В." По названию ф-ий - понятно их назначение.
Разобрался - всё работает исправно. Надо было принтовать ПЕРЕД открытием позиции.
if (GetTypeLastOpenPos(Symbol(), MN_L)==OP_BUY)
if (MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L)<0) // надо ли усреднять
{
if (NumberOfPositions(Symbol(), -1, MN_L)==1)
{// при первом усреднении, усреднять через стартовое количество пунктов - StopLossPips_BUYif ( NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0)>StopLossPips_BUY)
{
Print (" первое усреднение ",NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0),
" StopLossPips_BUY = ",StopLossPips_BUY, " MODE_BID = ", DoubleToStr(MarketInfo(OrderSymbol(), MODE_BID),Digits), " PriceOpenLastPos = ", DoubleToStr(PriceOpenLastPos(Symbol(), OP_BUY, MN_L),Digits), "P = ", DoubleToStr(Point,Digits));
WmOrderSend(Symbol(), OP_BUY, NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " первое усреднение вверх ", MN_L);
}
}
if (NumberOfPositions(Symbol(), -1, MN_L)>1) // при последующих - усреднять через MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))
{
if (NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0) >
NormalizeDouble((StopLossPips_BUY* MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1)),0))
{
Print (" последующие, если это больше ", DoubleToStr(NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0),Digits),
" этого, то открыть бай ", DoubleToStr(NormalizeDouble(StopLossPips_BUY*MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1),0),Digits),
" MODE_BID = ", DoubleToStr(MarketInfo(OrderSymbol(), MODE_BID),Digits), " PriceOpenLastPos = ", DoubleToStr(PriceOpenLastPos(Symbol(), OP_BUY, MN_L),Digits));
WmOrderSend(Symbol(), OP_BUY, NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " усреднение вверх ", MN_L);
}
}
}
А то получалось, что усредняющая позиция открывалась согласно алгоритма и ф-ия PriceOpenLastPos(Symbol(), OP_BUY, MN_L) - возвращала значение только что этой открытой позиции, поэтому и были вопросы.
В советнике из общего доступа на форуме к условию на вход в сделку прикрутил паттерн из 3-х баров.
После оптимизации и тестирования (3,5 года) поставил на одном демо-счете десяток окон с индивидуальными в каждом настройками, что обеспечивало скорострельность совы не менее 1,5 сделок в день. Такую же скорострельность обеспечил на 10 виртуальных компах своего сервера по одному окну в каждом.
Прошла неделя, но нигде ни одной сделки не заключено.
Здравствуйте! Подскажите, как научить советник определять фракталы?
Вопрос бы по подробнее. Есть же куча разных индюков, который умеют рисовать и находить фракталы. Советнику их определять не нужно. Берёшь индюк и из буферов индюка цепляешь значения того или иного фрактала. Ничего сложного, если уделить внимание этому вопросу.
Доброго дня! Пацаны, подскажите по такому вопросу: В тестере эксп открывает ордера согласно алгоритма и схемы увеличения размера канала последующих усреднений - это видно на картинке - каждое последующее усреднение открывается на бОльшем удалении от предыдущего (как в Илане). Но при этом в принте выдаются такие значения выражений, что усреднения происходить не должны, т.к. условия на их о открытия не выполняются 25 никак не больше 2856, 2197, 1690. Как вообще он заходит в это условие и открывает позиции? Я решил всё скобками фигурными обложить - не помогает...
Тест по ценам открытия. Вот код и картинка:
Здравствуйте! Подскажите, как научить советник определять фракталы?
См. навигатор. Если речь об этом, то так.
Доброго дня! Пацаны, подскажите по такому вопросу: В тестере эксп открывает ордера согласно алгоритма и схемы увеличения размера канала последующих усреднений - это видно на картинке - каждое последующее усреднение открывается на бОльшем удалении от предыдущего (как в Илане). Но при этом в принте выдаются такие значения выражений, что усреднения происходить не должны, т.к. условия на их о открытия не выполняются 25 никак не больше 2856, 2197, 1690. Как вообще он заходит в это условие и открывает позиции? Я решил всё скобками фигурными обложить - не помогает...
Тест по ценам открытия. Вот код и картинка:
Как я понимаю, не видя всего кода и не изучив как он работает тут, навряд ли, кто-то подскажет. Все функции, используемые в данном блоке известны лишь Вам. Лучше всего принтовать по ходу всё и следить за выдачей сообщений.
Как я понимаю, не видя всего кода и не изучив как он работает тут, навряд ли, кто-то подскажет. Все функции, используемые в данном блоке известны лишь Вам. Лучше всего принтовать по ходу всё и следить за выдачей сообщений.
Все ф-ии работают исправно - это ф-ии Ким И.В. "Только полезные ф-ии от Ким И.В." По названию ф-ий - понятно их назначение.
Разобрался - всё работает исправно. Надо было принтовать ПЕРЕД открытием позиции.
А то получалось, что усредняющая позиция открывалась согласно алгоритма и ф-ия PriceOpenLastPos(Symbol(), OP_BUY, MN_L) - возвращала значение только что этой открытой позиции, поэтому и были вопросы.
Благодарю, hoz.
Roman, Рад, что у Вас получилось :) К тому же, столь быстро.
В общем-то, у меня снова начал ругаться компилятор. Есть библиотека, которая использует в себе класс. Класс есс-но в библиотеку инклюдиться:
#include <HOZ_Code\Classes\CLogging.mqh> CLogging logging;При компилировании данной библиотеки, которая использует класс CLogging.mqh у меня ругается компилятор так:
В классе в данной строке:
Что это всё может означать?
Помогите!!!
В советнике из общего доступа на форуме к условию на вход в сделку прикрутил паттерн из 3-х баров.
После оптимизации и тестирования (3,5 года) поставил на одном демо-счете десяток окон с индивидуальными в каждом настройками, что обеспечивало скорострельность совы не менее 1,5 сделок в день. Такую же скорострельность обеспечил на 10 виртуальных компах своего сервера по одному окну в каждом.
Прошла неделя, но нигде ни одной сделки не заключено.
Что делать?
=========================
int GetSignal()
{
double LevelADX = iADX(NULL,TF_ADX,PeriodADX,4,MODE_MAIN,0);
double Delta_01_ADX =(iADX(NULL,TF_ADX,PeriodADX,4,MODE_MAIN,0)
- iADX(NULL,TF_ADX,PeriodADX,4,MODE_MAIN,2));
double mas,maf;
mas=iMA(NULL,TF_MA,Slow.period,0,Slow.metod,Slow.price,1);
maf=iMA(NULL,TF_MA,Fast.period,0,Fast.metod,Fast.price,1);
//------------------
double delta1,delta2;
delta1=NormalizeDouble((Close[1]-Close[2])/Point,5);
delta2=NormalizeDouble((Close[2]-Close[3])/Point,5);
double body3=NormalizeDouble((Open[3]-Close[3])/Point,5);
//------------------
int STsig=-1;
if(CrossLevel && Lines>0) {
int up,dw;
int up_l,dw_l;
for(jj=0;jj<8;jj++) {
if(ST[jj][0]<LevelDw) dw++; else{
if(ST[jj][0]>LevelUp) up++;
}
if(ST[jj][1]<LevelDw) dw_l++; else{
if(ST[jj][1]>LevelUp) up_l++;
}
}
if(up<=8-Lines && up_l>8-Lines) STsig=1;
if(dw<=8-Lines && dw_l>8-Lines) STsig=0;
}
if(STsig==-1 && BreakSweep) {
double big,small;
double big_l,small_l;
for(jj=0;jj<8;jj++) {
if(ST[jj][1]>big_l) big_l=ST[jj][1];
if(ST[jj][1]<small_l || small_l==0) small_l=ST[jj][1];
}
if(big_l-small_l<=Sweep && (small_l>=LevelUp || big_l<=LevelDw)) {
for(jj=0;jj<8;jj++) {
if(ST[jj][0]>big) big=ST[jj][0];
if(ST[jj][0]<small || small==0) small=ST[jj][0];
}
if(big-small>Sweep)
{
//--------------- мои прикрутки Volume [], а также Open [] и Close [] ------------------------------
if(Close[1]>Close[2]&& Close[2]>Close[3]&& Close[3]<Open[3] && Close[2]>High[3]
&& body3>=Body3 && delta1>=Delta1 && delta2>Delta2 && big_l<=LevelDw && maf>mas)
STsig=0;
if(Close[1]<Close[2]&& Close[2]<Close[3]&& Close[3]>Open[3] && Close[2]<Low[3]
&& body3>=Body3 && delta1>=Delta1 && delta2>Delta2 && small_l>=LevelUp && maf<mas)
STsig=1;
}
}
}
if(Volume[0]<2 && Volume[1]>Volume1 && Volume[2]>Volume2
&& Delta_01_ADX > DeltaADX && LevelADX < StopADX && STsig==0) return(OP_BUY);
if(Volume[0]<2 && Volume[1]>Volume1 && Volume[2]>Volume2
&& Delta_01_ADX > DeltaADX && LevelADX < StopADX && STsig==1) return(OP_SELL);
return(-1);
}
=================================================
Заранее благодарен!