Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 212

 
solnce600:

Спасибо за помощь.Пойду подышу кислородом,а потом буду расшифровывать Ваши советы.

Может дадите еще какую-нибудь более конкретную подсказку,или исправить один фрагмент моего кода.

Тогда в моих мозгах это засядет прочно и я не буду больше наступать на одни и те же грабли.

Спасибо.



Что бы исправить любую часть - надо писать ТЗ, Вы к этому готовы?
 
ALXIMIKS:

Такой вопрос, каким по щету будет последний закрытый ордер в истории ордеров при выборе OrderSelect :

1) Нулевым "0";

2) Последним "OrderHystoryTotal -1 "

3) Рандомным

4) Зависить от времени открытия ордера (тогда к какому пункту 1-му или 2-му ближе?)

Вы вот прям точно в этом уверены, что именно так и расположены ордера в списке? А если в один неприятный момент история будет перетасована и ордера в ней начнут располагаться иначе? Самый надёжный способ - найти крайний именно по времени, а не по гипотетическому предположению в вашей голове...

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

 
ALXIMIKS:

Такой вопрос, каким по щету будет последний закрытый ордер в истории ордеров при выборе OrderSelect :


https://www.mql5.com/ru/forum/131859/page4#434227
 
solnce600:

Буду Вам очень признателен если объясните "на пальцах" применительно к моему примеру.

В чем неисправна моя логика. Я не понимаю о чем идет речь.

Спасибо.



if (Ваше_первое_условие)

{

// тут будут

// исполняться

// все

// эти

// строки, только если

// Ваше_первое_ условие истинно

}

// эта строка выполнится в любом случае



if (Ваше_второе_условие)

// это строка выполнится только, если Ваше_второе_условие истинно

// это строка выполнится в любом случае, даже если Ваше_второе_условие вернуло ложь

// это строка выполнится в любом случае, даже если Ваше_второе_условие вернуло ложь


 
Vinin:

Что бы исправить любую часть - надо писать ТЗ, Вы к этому готовы?
Пока нет.
 
artmedia70:

Вы вот прям точно в этом уверены, что именно так и расположены ордера в списке? А если в один неприятный момент история будет перетасована и ордера в ней начнут располагаться иначе? Самый надёжный способ - найти крайний именно по времени, а не по гипотетическому предположению в вашей голове...

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


Немного не так оформил вопрос ((

перебирать все закрытые ордера каждый раз перед открытием не очень как-то логично.

Что можно сделать? НУ записать в файл данные по последнему закрытому ордеру и обновлять их при измененнии общего числа закрытых ордеров. (уже какая-то економия)

а если ордеров в истории будет 1000, а если 5000. История ордеров когда-то чистится или она вечная? если да то кем? ограничение в ее количестве есть?

В виду увеличения затрат времени на перебор при увеличении истории и задал вопрос в какую часть OrderSelect будут записаны последние закрытые ордера,

просто хотелось бы сузить глубину поиска.

 
digits:

Добрый день.

Моя стратегия учитывает величину спреда, спред определяется функцией:

Но так как в тестере стратегий спред постоянен, возникла потребность в эмуляторе случайного спеда. Чтоб в тестере эмулировать изменения спреда, в диапазоне от 2 до 3 пунктов (4 знака) в 80% случаев, и больше 3 пунктов в 20%. Может есть идеи как это реализовать, или ссылки где подобная идея решалась.


Наверное эта тема никому не интересна, но ради вашего мнения выложу версию где спред только 2 или 3 пункта.

double Spread_(){
   int compare = 0;
   int MaRand = 0;
   double sp = 0.0;
   double spread = 0.0;
     if (IsTesting() == TRUE){
         MathSrand(OrderTicket() + TimeLocal() / Bid);
         MaRand = MathRand();
         MaRand = MaRand % 2;
         if(MaRand == compare){
         sp = 2.0;
         }else{
         sp = 3.0;
       }
       spread = sp;
    }else{
       RefreshRates();
       spread = MathRound((Ask - Bid) / Point);
     }
   return(spread);
}  

 
digits:

Наверное эта тема никому не интересна, но ради вашего мнения выложу версию где спред только 2 или 3 пункта.


Сменили бы аватарку. Сделали бы что-то нейтральное. Ссылки запрещены
 

Народ привет кто нить может дать внятный ответ!!! Тех-анализ+мартин

я весь инет прогуглил не где внятного ответа не нашел если у кого нить есть инфа скиньте пожалуйста

 
artmedia70:

if (Ваше_первое_условие)

{

// тут будут

// исполняться

// все

// эти

// строки, только если

// Ваше_первое_ условие истинно

}

// эта строка выполнится в любом случае



if (Ваше_второе_условие)

// это строка выполнится только, если Ваше_второе_условие истинно

// это строка выполнится в любом случае, даже если Ваше_второе_условие вернуло ложь

// это строка выполнится в любом случае, даже если Ваше_второе_условие вернуло ложь



Если я пойму что у меня является первым и вторым условием и строкой которая всегда исполняется - я вплотную подойду к отгадке этой тайны.

ЭТО ПЕРВОЕ УСЛОВИЕ

if ((ot==0)
&&(Bid==Price)
&&(Open[1]-Close[1]>100*Point&&Open[1]-Close[1]<120*Point)
&&(High[1]-Open[1]>40*Point&&High[1]-Open[1]<60*Point)
&&(Close[1]-Low[1]>40*Point&&Close[1]-Low[1]<60*Point))

ЭТО ВТОРОЕ УСЛОВИЕ

if (isCloseLastPosByStop(Symbol(), OP_BUY, Magic, Lot))

ЭТО СТРОКА КОТОРАЯ БУДЕТ ВЫПОЛНЯТЬСЯ ВСЕГДА

return(0);

Правильно?

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