[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 575

 

to Armen

Это значит, что функций не были использованы в эксперте. Напишите что-то вроде

if (CountBuys()>2 && CountSells()>2) {\\действия}

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


Vinin, спасибо большое за ответ. Но я честно говоря немного не понял, зачем ask1, ask2 ask3 присваиваются значения 1,-1,-1. что они означают. Если не сложно можете словами описать,что и как происходит, я новичок, еще не совсем хорошо все понимаю. Буду Вам очень благодарен)


Присваиваются значения, которым цена никогда не будет равна, для того что бы убедиться данных достаточно

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

На МТ5 можно см. Применение функции TesterWithdrawal() для моделирования снятия прибыли

На МТ4 такая возможность не реализована

 

Добрый день!

Пишу индикатор, который считает количество пунктов вверх и вниз прошедших ценой за один тик.
Что не так в коде и где ошибка, подскажите плиз!

#property indicator_chart_window

extern int LimitBar = 10;
extern int cegl = 6;
extern string Shrift = "Arial Black";
extern bool delete = true;



double old_price, max_price, sum_pip_sell, sum_pip_bay, new_pip_bay, new_pip_sell, old_pip_bay, old_pip_sell;
datetime ctat_SB =0;

int init() {return(0);}

int deinit() {
if (delete == true) {
GetDellName(); 
}
ObjectsDeleteAll(0, OBJ_TREND);
return(0);
}

int start() {
double price;
string name_4,name_b;
int i=0;
int limit, pip; 
double delta; 
int counted_bars=IndicatorCounted(); 
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
if(ctat_SB==0) ctat_SB=Time[0];

if(limit>0) limit=0;

for(i=limit; i>=0; i--) {
if(old_price==0) old_price=Close[i];

if(iBarShift(NULL,0,ctat_SB)-iBarShift(NULL,0,Time[i])>=LimitBar) { ' счетчик баров для LimitBar

sum_pip_sell =0;
sum_pip_bay = 0; 
new_pip_bay = 0;
new_pip_sell = 0;
old_pip_bay = 0;
old_pip_sell = 0;

} 

price = Close[i];
if(price > max_price) max_price=price; 

delta = price - old_price; ' разница пунктов
pip = delta*10000; ' округляем до целого

//---- Каунт плюс 

if(delta>=0) { ' условие для ап пунктов

new_pip_bay = pip;
sum_pip_bay = old_pip_bay+new_pip_bay;
old_pip_bay = sum_pip_bay; 

}
//---- Каунт минус
if(delta<0) { ' условие для даун пунктов

new_pip_sell = MathAbs(pip);
sum_pip_sell = old_pip_sell+new_pip_sell;
old_pip_sell = sum_pip_sell;

} 
//----
old_price=price;

//---- размещаем счетчик на графике
name_4 = "TPM_ 4 "+TimeToStr(ctat_SB);
SetText(name_4+"sell",DoubleToStr(sum_pip_sell,0), ctat_SB+60*Period()*2, max_price+(Ask-Bid)*6, Blue,12); 
SetText(name_4+"bay",DoubleToStr(sum_pip_bay,0),ct at_SB-60*Period()*2, max_price+(Ask-Bid)*4.5, Red,12); 

} 

return(0);
}
void SetText(string name,string text,datetime t1, double p1, color c, int size) // --- отображение текста
{
if (ObjectFind(name)!=-1) ObjectDelete(name);
ObjectCreate(name,OBJ_TEXT,0,0,0,0,0); 
ObjectSet(name, OBJPROP_TIME1 , t1);
ObjectSet(name, OBJPROP_PRICE1, p1); 
ObjectSetText(name,text,cegl,Shrift,c);
}

//+------------------------------------------------------------+
void GetDellName (string name_n = "TPM_ ") // -- удаление меток с графика
{
string vName;
for(int i=ObjectsTotal()-1; i>=0;i--)
{
vName = ObjectName(i);
if (StringFind(vName,name_n) !=-1) ObjectDelete(vName);
} 
} 
//----

Заранее спасибо!


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

Разрешайте советнику торговать только депозитом, равным начальному депо.

Запомните размер начального депозита и перед каждым открытием позиции проверяйте её лот. Если объём сделки превысит допустимый размер - уменьшайте лот, либо высвобождайте средства.

 
Fox_RM:

Добрый день!

Пишу индикатор, который считает количество пунктов вверх и вниз прошедших ценой за один тик.
Что не так в коде и где ошибка, подскажите плиз!

Заранее спасибо!


А чего это так много всего???

Запоминайте цену прошлого тика. С приходом нового тика считайте разницу цен, делённую на пункт и вновь запоминайте эту цену как цену прошлого тика.

 
artmedia70:

А чего это так много всего???

Запоминайте цену прошлого тика. С приходом нового тика считайте разницу цен, делённую на пункт и вновь запоминайте эту цену как цену прошлого тика.

В условиях для АП и ДАУН пунктов кода именно так и прописано, но при отображении индикатора на графике цены, метка выводит 0 для ап и 0 для даун количества пунктов. В чем беда не пойму!
 

Господа программисты!

Соответствует ли приоритет (и ассоциативность) операций MQL4 языку C ?

Не хочется злоупотреблять скобками, но нигде в документации приоритет операций не оговаривается.

Вопрос не праздный. MQL4 позиционируется как C-подобный язык. Здесь ключевое слово ПОДОБНЫЙ. Если такая вещь как полное вычисление логических выражений просто отход от стандарта C, то видимость переменных, определенных в блоке, за пределами этого блока, есть серьезное нарушение канонов программирования.

Кто знает, как далеко могла зайти фантазия создателей MQL4 :).

 
artmedia70:

Разрешайте советнику торговать только депозитом, равным начальному депо.

Запомните размер начального депозита и перед каждым открытием позиции проверяйте её лот. Если объём сделки превысит допустимый размер - уменьшайте лот, либо высвобождайте средства.

Я имею ввиду вот, что: торгуя на микрореале с депозитом 10к цкнтов, могу ли я снимать излшние средства в сейф вручную, когда захочу, в процессе работы советника или нужно обязательно останавливать при этом советник, закрыть все открытые позиции и только потом снимать излишние средства? Торгую постоянным лотом 0.1. Как реально осуществить Вашу рекомендацию: "Разрешайте советнику торговать только депозитом, равным начальному депо."?
Причина обращения: