Как кодировать? - страница 93

 

Спасибо, но не могли бы вы объяснить мне, почему

BuyCondition = BuyValueCurrent1 != EMPTY_VALUE

почему пустое_значение?

 

в любом случае это не работает, и я не могу понять и выяснить почему...

вот мои переменные

BuyValueCurrent = iCustom(NULL,TimeFrame,IndicatorName1,NumBars,0,1); // braintrend1 [/PHP]
BuyValueCurrent2 = iCustom(NULL,TimeFrame,IndicatorName2,NumBars,0,1); // braintrend2

and here is the statement

[PHP] BuyCondition = (BuyValueCurrent != EMPTY_VALUE && BuyValueCurrent2 != EMPTY_VALUE);

он дает совершенно нечеткие результаты, даже когда индикатор (Braintrend2stop и BrainTrend1Stop) - SELL

 
clarc:
У меня есть советник, который открывает и управляет позицией, но иногда индикатор дает один и тот же сигнал несколько раз, и советник открывает каждый раз, когда этот сигнал выходит новая позиция - но я не хочу вторую, третью и так далее позицию, я хочу только первую - возможно ли, что советник проверяет открытую позицию на основе магического числа и пары, чтобы избежать таких множественных входов?

Вот идея:

int CountLongs()

{

int count=0;

int trade;

int trades=OrdersTotal();

for(trade=0;trade<trades;trade++) {

OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber) continue;

if(OrderType()==OP_BUY) count++;

} //---- для

return(count);

}

int CountShorts()

{

int count=0;

int trades;

int trades=OrdersTotal();

for(trade=0;trade<trades;trade++) {

OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber) continue;

if(OrderType()==OP_SELL) count++;

} //---- для

return(count);

}

И в функции start() :

if(CountLongs() == 0 && CountShorts() == 0) {

Ваше условие входа здесь

}

Надеюсь, это поможет.

FerruFx

 
payback:
в любом случае это не работает, и я не могу понять и выяснить почему...

вот мои переменные

BuyValueCurrent = iCustom(NULL,TimeFrame,IndicatorName1,NumBars,0,1); // braintrend1 [/PHP]
BuyValueCurrent2 = iCustom(NULL,TimeFrame,IndicatorName2,NumBars,0,1); // braintrend2

and here is the statement

[PHP] BuyCondition = (BuyValueCurrent != EMPTY_VALUE && BuyValueCurrent2 != EMPTY_VALUE);
он дает совершенно нечеткие результаты, даже когда индикаторы (Braintrend2stop и BrainTrend1Stop) SELL

Я не знаю ваших индикаторов Braintrend1 и 2, я просто предположил, что когда выполняется условие покупки, они рисуют стрелку на графике. В MT4 значение буфера по умолчанию - это константа с именем "EMPTY-VALUE", поэтому если стрелки нет, то значение, возвращаемое функцией iCustom() - это эта константа, а если стрелка есть, то возвращаемое значение - это цена, на которую поставлена стрелка.

Как я понял, вы хотите покупать, когда оба индикатора показывают стрелку, не так ли?

 

Да, это именно то, что я хочу сделать

 
payback:
Да, это именно то, что я хочу сделать

Поэтому, пожалуйста, проверьте синтаксис вашего iCustom().

 

что я должен проверить? может я что-то упустил?

double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

ну для чего я предполагаю, что если есть сигнал на покупку, то он сохраняется в буфере 0, иначе он пуст и в буфере 1 есть сигнал на продажу

 
payback:
что я должен проверить? может я что-то упустил
double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
ну я предполагаю, что если есть сигнал на покупку, то он сохраняется в буфере 0, иначе он пуст, а в буфере 1 есть сигнал на продажу.

Опубликуйте ваш индикатор здесь, я посмотрю.

 

Хорошо, спасибо!

и, пожалуйста, объясните

Файлы:
 
payback:
Хорошо! И, пожалуйста, объясните

Откройте файл BrainTrend1Stop.mq4.

В начале файла вы можете найти :

extern int NumBars=500;

extern int EnableAlerts=0;

extern int SignalID=0;[/PHP]This means that you have to fill those three parameters as arguments in the iCustom() call, like this:

BuyValueCurrent = iCustom(NULL,0,"BrainTrend1Stop",NumBars,EnableAlerts,SignalID,0,1); // braintrend1

[/PHP]About the buffer's number, you can see this:

#property indicator_color1 Magenta

#property indicator_color2 Aqua[/PHP]So the buffer 0 is Magenta and the buffer 1 is Aqua.

Thus if the Buy arrow's color is Aqua, the buffer's number is 1 and the iCustom call is:[PHP]BuyValueCurrent = iCustom(NULL,0,"BrainTrend1Stop",NumBars,EnableAlerts,SignalID,1,1); // braintrend1
A little lower you have:[PHP] SetIndexEmptyValue(1,0.0);

This means that the default empty value for the buffer 1 is set to 0.0; so when there is no arrow, the value returned by the iCustom() call will be 0.0.

So you should know the presence of the arrow checking its value against 0, like this (if the second indic follows the same behavior):[PHP]BuyCondition = (BuyValueCurrent > 0 && BuyValueCurrent2 > 0);

Что касается второго индикатора, я думаю, что вы должны быть в состоянии сделать тот же анализ самостоятельно.

Причина обращения: