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

 

Здравствуйте,

возможно ли с помощью кода модифицировать только ордер на покупку или продажу текущего активного символа графика?

Это будет очень полезно для меня в скрипте, где я использую функцию WindowsPriceonDropped для открытия ордера.

Спасибо

 

...

дасио,

Попробуйте сделать что-то вроде этого:

for (int i=OrdersTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES)==false) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

{

// do the proccessing you wish here

}

}

dasio:
Привет,

можно ли с помощью кода модифицировать только ордер на покупку или продажу текущего активного символа графика?

Это будет очень полезно для меня в скрипте, где я использую функцию WindowsPriceonDropped для открытия ордера.

Спасибо
 

Кто хочет испытание?

Мне нужен код, чтобы сделать следующее, см. прикрепленный скриншот. Это будет торговля на покупку.

Я пробовал цикл for, множество условий if, но ни одно из них не дало результатов, которые я ищу.

Все кажется простым, но я не смог заставить его работать.

Файлы:
maexample.jpg  54 kb
 

Ваше условие ввода может быть написано примерно так:

double pipMultiplier = 1;

if (Digits==3 || Digits==5) pipMultiplier = 10;

double ma = iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,1);

bool openBuy = (Low[1]>ma && High[1]<(ma+5.0*Point*pipMultiplier));

if (openBuy)

{

// your code here

}

cyber1:
Мне нужен код, чтобы сделать следующее, см. прикрепленный скриншот. Это будет сделка на покупку.

Я пробовал цикл for, множество условий if и ни одно из них не дало результатов, которые я ищу.

Это кажется простым, но я не смог заставить его работать.
 
mladen:
Ваше условие входа может быть написано примерно так:
double pipMultiplier = 1;

if (Digits==3 || Digits==5) pipMultiplier = 10;

double ma = iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,1);

bool openBuy = (Low[1]>ma && High[1]<(ma+5.0*Point*pipMultiplier));

if (openBuy)

{

// your code here

}

Но это еще не все. Код, который вы разместили, даст мне сигнал для бара, который пересекает скользящую среднюю. Но мне также нужен способ входа в сделку на любом баре после стрэддл-бара до 5 баров при условии, что они не превышают MA+5. Причина, по которой я не беру сигнал на покупку на стрэддл-баре, заключается в том, что есть другой индикатор, который должен показывать значение TRUE, которое может не быть TRUE на стрэддл-баре, но если оно TRUE на любом баре до 5 баров после стрэддл-бара и не превысило лимит MA+5, я все равно могу заключить сделку. Я не беру несколько сделок, только одну на одну установку.

Вот что у меня есть на данный момент. На данный момент я только помечаю подходящие бары стрелкой под ними, только для покупок. Как только я разберусь с этим, я вставлю код для исполнения ордера. Я знаю, что это выглядит просто, но если я не упустил что-то очевидное, это не так.

//+------------------------------------------------------------------+

double Poin;

//+------------------------------------------------------------------+

//| Custom initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- indicators

if (Point==0.00001) Poin=0.0001;

else {

if (Point==0.001) Poin=0.01;

else Poin=Point;

}

//----

return(0);

}

//+------------------------------------------------------------------+

// +

//+------------------------------------------------------------------+

int deinit(){

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start(){

int MAM1StartBar=1;

int M1MAEntryPoint1=0;

int M1MAEntryPoint2=5;

string sObjName;

//------Indicators-------------//

double MAM0= iMA(NULL,0,20,0,0,0,MAM1StartBar);

double MAM1= iMA(NULL,0,20,0,0,0,MAM1StartBar+1);

double M1High0 = NormalizeDouble(iHigh(NULL,PERIOD_M1,MAM1StartBar),Digits);

double M1High1 = NormalizeDouble(iHigh(NULL,PERIOD_M1,MAM1StartBar+1),Digits);

double M1High2 = NormalizeDouble(iHigh(NULL,PERIOD_M1,MAM1StartBar+2),Digits);

double M1High3 = NormalizeDouble(iHigh(NULL,PERIOD_M1,MAM1StartBar+3),Digits);

double M1High4 = NormalizeDouble(iHigh(NULL,PERIOD_M1,MAM1StartBar+4),Digits);

double M1High5 = NormalizeDouble(iHigh(NULL,PERIOD_M1,MAM1StartBar+5),Digits);

double M1Low0 = NormalizeDouble(iLow(NULL,PERIOD_M1,MAM1StartBar),Digits);

double M1Low1 = NormalizeDouble(iLow(NULL,PERIOD_M1,MAM1StartBar+1),Digits);

double M1Low2 = NormalizeDouble(iLow(NULL,PERIOD_M1,MAM1StartBar+2),Digits);

double M1Low3 = NormalizeDouble(iLow(NULL,PERIOD_M1,MAM1StartBar+3),Digits);

double M1Low4 = NormalizeDouble(iLow(NULL,PERIOD_M1,MAM1StartBar+4),Digits);

double M1Low5 = NormalizeDouble(iLow(NULL,PERIOD_M1,MAM1StartBar+5),Digits);

// double MAM1TRL1=NormalizeDouble(MAM0+M1MAEntryPoint1*Poin,Digits);

// double MAM1TRL2=NormalizeDouble(MAM0+M1MAEntryPoint2*Poin,Digits);

//Blue arrow indicates straddle bar

if(M1High0>= MAM0 && M1Low0<=MAM0){

sObjName="Test_BLine1"+Time[MAM1StartBar];

ObjectCreate(sObjName, OBJ_ARROW, 0, Time[MAM1StartBar],Low[MAM1StartBar]-1.5*Poin);

ObjectSet(sObjName, OBJPROP_ARROWCODE, 241);

ObjectSet(sObjName, OBJPROP_COLOR, Blue);

}

//Aqua arrow indicates straddle bar+1

if(M1Low1=MAM0){

if(M1High1<=MAM0+M1MAEntryPoint2*Poin){

if(M1Low0 > MAM0){

sObjName="Test_BLine2"+Time[MAM1StartBar];

ObjectCreate(sObjName, OBJ_ARROW, 0, Time[MAM1StartBar],Low[MAM1StartBar]-1*Poin);

ObjectSet(sObjName, OBJPROP_ARROWCODE, 241);

ObjectSet(sObjName, OBJPROP_COLOR, Aqua);

}

}

}

//----

return(0);

}

 

На этом скриншоте вам нужно прервать сделку на баре 4, потому что бар 3 превысил лимит MA +5, что означает, что на баре 4 вам нужно проверить, превысил ли бар 3 лимит MA +5, он превысил, так что это конец этой торговой установки.

Здесь все 5 баров соответствуют требованиям, потому что ни один из них не превысил лимит MA +5.

Файлы:
 

На этом скриншоте вам нужно прервать сделку на баре 4, потому что бар 3 превысил лимит MA +5, что означает, что на баре 4 вам нужно проверить, превысил ли бар 3 лимит MA +5, он превысил, и это конец этой торговой установки.

Здесь все 5 баров соответствуют требованиям, потому что ни один из них не превысил лимит MA +5.

 

...

cyber1

В ваших примерах, насколько я понимаю, для того, чтобы иметь возможность прервать сделку, как вы описываете, вы также должны знать будущее (поскольку до бара "прерывания" правила действовали и возвращали сигнал на вход).

С другой стороны, если вы попытаетесь проверить все бары назад для условия входа, в конечном итоге у вас всегда будет "нарушение правила" и вы не сможете войти в позицию.

cyber1:
На этом скриншоте вам нужно прервать сделку на баре 4, потому что бар 3 превысил лимит MA +5, что означает, что на баре 4 вам нужно проверить, превысил ли бар 3 лимит MA +5, он превысил, и это конец этой торговой установки.

Здесь все 5 баров подходят для входа, потому что ни один из них не превысил лимит MA +5

 

Закрытие всех открытых сделок

Кто-нибудь может помочь мне сделать этот советник?

Этот советник будет закрывать все открытые торговые пары при достижении целевой прибыли и убытка.

Когда он закроет все, то начнет отслеживать открытые сделки.

У меня есть лимитный талант, чтобы сделать это.

Этот советник должен работать отдельно от основного советника по каждой паре.

 

Сигналы и линии сопротивления/поддержки dinamyc.

Не могли бы вы помочь мне перевести этот индикатор на язык MT4?

a:=(hhv(close,tpr)+llv(close,tpr)+close)/3;

b:=(a1*2)-hhv(close,tpr);

перемещение b:=mov(b,tpr,simple);

c:=(a1*2)-llv(close,tpr);

перемещение c:=mov(c,tpr,simple);

d:=(hhv(close,tpr/2)+llv(close,tpr/2)+close)/3;

перемещение d:=mov(d,tpr/2,simple);

поток:=(b+c+d)/3;

moving stream:=mov(stream,tpr,simple).

hhv= максимальное значение периода (наибольшее значение цены закрытия в выбранном временном периоде)

llv= минимальное значение периода (самое низкое значение цены закрытия в выбранном временном периоде)

tpr= временной период (от 1 до любого желаемого)

mov= скользящая средняя.

На выходе должны быть "stream" и "moving stream"! Даже если он будет содержать "b", "moving b", "c", "moving c", "d" и "moving d", это не плохо!

Спасибо.

Этот форум замечательный......

Lucmat

Файлы:
immagine.jpg  258 kb
Причина обращения: