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

 
chief2000:

Возник такой вопрос -
Можно ли из кода Пользовательского Индикатора узнать активное ли в данный момент окно в котором он запущен или нет?
Например в двух окнах бежит один и тот же Индикатор - необходимо чтобы он работал только в том окне, график которого активен и бездействовал во втором.

Спасибо!

И опять помогает библиотека :-)
 
Zhunko:
И опять помогает библиотека :-)
Спасибо!
 
Добрый вечер! Я тут робота быстренько накидывать начал, и даже вдруг без ошибок прокампилировал, и вот, он вдруг два ордера сразу открывает!!! Ну то есть по ордеру, на первом и на втором тике. Вот код, щас ниже вставлю. Чтоб чталось, в первом фор лот подсчитываеця, его и смотреть нинада, а во втором- во втором ордер и открывается, причем, переменная BUY это количество уже открытых ордеров бай, если она больше ноля, хоть один ордер есть, тогда открываться не должны.
//+------------------------------------------------------------------+
//|                                                        антиб.mq4 |
//|                      Copyright © 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double volume=0.01;extern double stoploss=12,takeprofit=12;extern int magic=50001,I=5;
int ticket;double volumee ; 
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   volumee=volume;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
        
int start()
  {   int BUY;
  
//----

 for( int i=OrdersHistoryTotal() -1;i>=0;i--){
    OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if (OrderMagicNumber( )== magic) { if(OrderSymbol()== Symbol()) {
      if(OrderType()==OP_BUY ) {   if ((OrderProfit( )-3*Point) <  OrderTakeProfit( ) && (OrderProfit( )+3*Point) >  OrderTakeProfit( ) ) { if( OrderTicket( ) == ticket ) {
               volumee = volumee+volumee;}}}}}}
if (volumee>volume*I){volumee=volume;}


              for ( i=OrdersTotal()-1;i>=0;i--)
   {
    if (OrderSelect(i, SELECT_BY_TICKET ) == true)    Alert ("Select error ", GetLastError( ) ) ;
     if(OrderMagicNumber( )== magic){
      if(OrderSymbol()== Symbol()) {
      if(OrderType()==OP_BUY ) {
                             BUY++;}}}}   
 if(BUY==0){

 ticket= OrderSend( Symbol(), OP_BUY, volumee, NormalizeDouble(( Ask),Digits),NormalizeDouble(( Point*3),Digits) , NormalizeDouble(( Ask-stoploss*Point),Digits), NormalizeDouble(( Ask+takeprofit*Point),Digits), NULL,  magic, 0, Red) ;}
 
 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Вот, два ордера! !
 

А вы знаете, возможно что я с циклом фор пиримудрил, ордеров один, я минусую еще один, и условие цикла не выполняется вообще. Да,да, похоже, и ордеров ведь как раз два открывается!

Люди, мне свои последние комменты удалить?

Нет, все равно два, и еще после третьего-четвертого тика Alert: Select error 4105 пишет,

это ордер не выбран вроде, а поначалу ошибки нет.. Вот,правильно так for( int i=0;i<=OrdersHistoryTotal();i++){

и так for( int i=0;i<=OrdersTotal();i++){

А ордеров- два все одно.

Все, один. Фух.. ;


 
Ошибка 4105-ордер не выбран-не уходит, но в целом работает адекватно
 
Ivn:

добрый день как написать стандартный советник другого тайфрейма. Т.Е. на график 1 часа повесить этот индикатор, который будет показывать индикатор 4 часов.

пытался //+------------------------------------------------------------------+
//| вв на 4 часах.mq4 |
//| Copyright © 2012, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LightSeaGreen
#property indicator_color2 LightSeaGreen
#property indicator_color3 LightSeaGreen
//---- indicator parameters
extern int BandsPeriod=20;
extern int BandsShift=0;
extern double BandsDeviations=2.0;
//---- buffers
double MovingBuffer[];
double UpperBuffer[];
double LowerBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,MovingBuffer);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,UpperBuffer);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,LowerBuffer);
//----
SetIndexDrawBegin(0,BandsPeriod+BandsShift);
SetIndexDrawBegin(1,BandsPeriod+BandsShift);
SetIndexDrawBegin(2,BandsPeriod+BandsShift);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Bollinger Bands |
//+------------------------------------------------------------------+
int start()
{
int i,k,counted_bars=IndicatorCounted();
double deviation;
double sum,oldval,newres;
int B=iBars( NULL,PERIOD_H4);
double C=iClose(NULL,PERIOD_H4,0);
//----
if(B <=BandsPeriod) return(0);
//---- initial zero
if(counted_bars<1)
for(i=1;i<=BandsPeriod;i++)
{
MovingBuffer[B-i]=EMPTY_VALUE;
UpperBuffer[B-i]=EMPTY_VALUE;
LowerBuffer[B-i]=EMPTY_VALUE;
}
//----
int limit=B-counted_bars;
if(counted_bars>0) limit++;
for(i=0; i<limit; i++)
MovingBuffer[i]=iMA(NULL,PERIOD_H4,BandsPeriod,BandsShift,MODE_SMA,PRICE_CLOSE,i);
//----
i=B-BandsPeriod+1;
if(counted_bars>BandsPeriod-1) i=B-counted_bars-1;
while(i>=0)
{
sum=0.0;
k=i+BandsPeriod-1;
oldval=MovingBuffer[i];
while(k>=i)
{
newres=C[k]-oldval;
sum+=newres*newres;
k--;
}
deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);
UpperBuffer[i]=oldval+deviation;
LowerBuffer[i]=oldval-deviation;
i--;
}
//----
return(0);
}
//+------------------------------------------------------------------+

не получилось

вот эта сторока newres=C[k]-oldval;- '[' - unexpected token

а индикатор Bollinger Bands.


Вместо C[k] вставить iClose(NULL,PERIOD_H4,k);

получилось однако как бы добиться то, что бы график 1 часа и линии 4 часового были отображены более привычным способом.
в канале Bollinger Band двигается цена если перевести даный код на график, то можно увидеть как цена выходит из канала, такое впечатление, что график Bollinger Band на 4 часах не привязан к линии времени

заранее спасибо

 

Ребята, подскажите из опыта... Выбрал контору для аренды VPS для торговли через клиентский терминал МТ4, интересует сколько в среднем трафика потребляет один запущенный терминал, например, с десятью сОвами? Будет работать несколько терминалов... Чтобы мне выбрать соответствующий тарифный план из предложенных:

П.С. У них расклады идут по общему трафику, т.е. входящий + исходящий.

 

Коллеги, кто знает ответьте:

У меня тестер стратегий на одном и том же временном промежутке (01.05.2011 - 27.01.2012), валютной паре EURUSD, на часовых барах (Н1), от одного ДЦ (Альпари), и одном и том же советнике, но на разных компьютерах (ноутбук, стационар) выдает противоположные результаты! На ПК -2000 долл., на ноутбуке +3000 долл. И там, и там проверил по 2-3 раза.

Подскажите пожалуйста причину и что делать и/или дайте ссылку где что по теме можно почитать.
 
Sersad:

Коллеги, кто знает ответьте:

У меня тестер стратегий на одном и том же временном промежутке (01.05.2011 - 27.01.2012), валютной паре EURUSD, на часовых барах (Н1), от одного ДЦ (Альпари), и одном и том же советнике, но на разных компьютерах (ноутбук, стационар) выдает противоположные результаты! На ПК -2000 долл., на ноутбуке +3000 долл. И там, и там проверил по 2-3 раза.

Подскажите пожалуйста причину и что делать и/или дайте ссылку где что по теме можно почитать.


Я сам как-то подлавливался на этом... было подобное: 1-ый терминал был установлен с Метаквотов, 2-ой с Альпарей, история также соответственно, были значительные расхождения при тесте одного и того же сова, долго не мог понять в чем дело.

1. Загрузите терминалы с Альпари. Закачайте Альпаришную историю котировок по инструменту, при этом будет такое окно:

Если оно не выскакивает после нажатия на F2 и последующую кл. "Загрузить", то значит Вы качаете историю котировок не с Альпари

2. В тестере терминала выставите все опции одинаково + проверьте размер спреда, посредством нажатия на кл. "Свойства символа" в тестере стратегий.

Перед этим - вытрите и закачайте заново историю котировок интересующего Вас инструмента + проверьте Период тестирования: на скрине Н4 - чтобы и там и там он был - одинаков.

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