extremumprice.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.//--------------------------------------------------------------------externint Quant_Bars = 30 ; // Количество баровbool OpnBuy = false ,
OpnSell = false ;
//--------------------------------------------------------------------int start() // Спец. функция start
{
int i; // Номер бара double Minimum=Bid, // Минимальная цена
Maximum=Bid; // Максимальная ценаfor (i= 0 ;i<=Quant_Bars- 1 ;i++) // От нуля (!) до..
{ // ..Quant_Bars-1 (!)if (Low[i]< Minimum) // Если < известного
Minimum=Low[i]; // то оно и будет минif (High[i]> Maximum) // Если > известного
Maximum=High[i]; // то оно и будет макс
}
//--------------------------------------------------------------------if (iOpen(NULL, 0 , 1 )>Maximum)
{
OpnBuy = true :
OpnSell= false ;
}
if (iOpen(NULL, 0 , 1 )<Minimum)
{
OpnSell= true ;
OpnBuy = false :
}
//-------------------------------------------------------------------// А тут код открытия позиций. if (OpnBuy) {открываем Бай};// if (OpnSell) {открываем Селл};// Но обязательно нужно сделать проверку на существование уже открытой позиции,// иначе они будут открываться на каждом тике пока присутствует сигнал...return ; // Выход из start()
}
//--------------------------------------------------------------------
1. 101이라고 가정해 봅시다. 그리고 주문을 포지션으로 변환하기 위한 플래그를 재설정합니다. ConvOrd=false라고 가정해 봅시다.
2. 매직 101이 있는 위치가 있는지 확인하고, 있으면 변환 플래그를 설정하십시오. ConvOrd=true;
3. ConvOrd가 true인지 확인하고 ConvOrd==true인지 확인합니다. 매직 101로 위치의 존재를 확인하고 존재하지 않는 경우 - 이미 닫혀있다는 뜻입니다.
{플래그 재설정 ConvOrd=false; 새로운 지연 설정;}
플래그없이 할 수 있다고 생각합니다 ...
논리는 명확하지만 코드에서 구현하는 방법을 모르겠습니다. 많은 옵션을 시도했지만 성공하지 못했습니다. 찻주전자인 것 같아요. 그것이 내가 여기에 쓴 이유입니다. 663페이지에서 내 코드를 보여주었습니다. 욕망이 있다면 - 끝내거나 적어도 그것을 끝내는 방법을 더 구체적으로 알려주십시오. 고맙습니다.
artmedia70 , Roger 님, 도움을 주셔서 감사합니다. 알아낸 것 같은데, 실제로 0번째 막대의 가격은 최소값과 최대값보다 낮거나 높을 수 없습니다. 생각하지 않고 Ask를 Min 변수의 값으로 추가했는데 이제 작동하는 것 같습니다. artmedia70 , 나에 비해 대부분의 전문가))). 다시 한번 감사합니다.
dimon74 : 논리는 명확하지만 코드에서 구현하는 방법을 모르겠습니다. 많은 옵션을 시도했지만 성공하지 못했습니다. 찻주전자인 것 같아요. 그것이 내가 여기에 쓴 이유입니다. 663페이지에서 내 코드를 보여주었습니다. 욕망이 있다면 - 끝내거나 적어도 그것을 끝내는 방법을 더 구체적으로 알려주십시오. 고맙습니다.
SellStop 주문을 할 때 더 간단하게 시도하고 TakeProfit 값을 기억하고 입찰가가 이 가격 아래로 떨어지면 Buy에 두십시오.
자기 자본이 이전 가치에서 이익의 특정 비율에 도달하면 모든 포지션을 닫습니다... 원래대로 작동합니다... 자세히...
자산이 이전 가치의 일정 비율만큼 감소하면 가장 큰 손실을 입은 포지션을 찾아 그것이 누구인지 결정합니다... 글쎄요, 거기에서 매수 또는 매도
이중 로트로 반대 방향으로 잠금 위치를 엽니다. 다음으로, 우리는 그들의 총 이익(손실 및 잠금)을 살펴보고 더 커지는 즉시,
글쎄, 10 점이라고 가정 해 봅시다. nafig를 닫으십시오 ...
사물의 논리에 따르면 다음 틱에서 형평성을 먼저 확인하고 모든 것이 정상이면 작업을 계속합니다. 선생님... 모든 것이 다시 나빠지면 다음 엘크를 찾습니다. ..
그러나 어떤 이유로 그는 한 번에 두 개의 잠금 장치를 엽니 다 ... 매수와 매도 모두, 또한 로트가 0.1이면 첫 번째 잠금 장치가 이중 로트 = 0.2로 열립니다.
그리고 두 번째 것은 그것을 다시 두 배로 늘리고 이미 많은 0.4로 열립니다 ... 따라서 그들이 지금 태양 아래의 장소를 위해 서로 싸우고 있다면 여기에서 자물쇠가 무엇입니까 ... :(
코드를 첨부하고 있습니다. 누군가가 내 손가락으로 나를 찌를 수도 있습니다.
//----------------- Закрытие позиций если эквити выросло на N процентов ---------------------------if (Equ_NEW>=Equ_OLD+EquPerc) // Новое эквити больше старого на процент прибыли..
{
// ClosePosBySizeLossInCurrency(NULL, -1, -1, 0); // Закрытие всех убыточных позиций
ClosePosFirstProfit( NULL , - 1 , - 1 ); // Закрываем все позиции, сначала прибыльные
DeleteOrders( NULL , - 1 , - 1 ); // Удаляем ордера
Equ_NEW=AccountEquity(); // Запоминаем новое значение эквити
Equ_OLD=Equ_NEW; // и вписываем его в "старое"
CountClsEQU++; // Увеличиваем счётчик кол-ва закрытий для ф-ции вывода информации
LockBuy51 =true; // Разрешаем открытие локирующих
LockSell51=true; // позиций Buy и Sell
OpnBuy51 =true; // и вообще разрешаем открываться
OpnSell51 =true; // в любую сторону...
}
//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------if (Equ_NEW<=Equ_OLD-EquPerc/ 2 ) // Новое эквити меньше старого на столько-то процентов...
{
Trade=false; // Запрещаем торговлю//-------------- Закрытие двух позиций, если ранее был установлен лок на убыточную ------------- if ( OrderSelect (TicketLoss, SELECT_BY_POS, MODE_TRADES)) // Выбираем убыточную позицию (если её тикет
{ // ранее был сохранён в TicketLoss)double prloss=OrderProfit()+OrderSwap(); // Размер профита убыточной позицииint typeloss =OrderType(); // Тип убыточной позицииint mnloss =OrderMagicNumber(); // Magic убыточной позиции
}
if ( OrderSelect (TicketLock, SELECT_BY_POS, MODE_TRADES)) // Выбираем локирующую позицию (если её тикет
{ // ранее был сохранён в TicketLock)double prlock=OrderProfit()+OrderSwap(); // Размер профита локирующей позицииint typelock =OrderType(); // Тип локирующей позиции
}
if (prloss+prlock>= 10 * Point ) // Если их суммарный профит больше 10 пунктов
{
ClosePositions( NULL , typelock, 5100 ); // Закрываем локирующую позицию
ClosePositions( NULL , typeloss, mnloss); // Закрываем убыточную позицию
}
//--------------- Поиск убыточной позиции и установка локирующей ------------------------- double Loss= 0 ; // Последнее значение убыткаint i, k= OrdersTotal (), OrdTicket=- 1 ;
for (i=k- 1 ; i>= 0 ; i--) { // Цикл по всем ордерам терминалаif ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderProfit()+OrderSwap()< 0 )) { // Если профит позиции меньше 0if (Loss>OrderProfit()+OrderSwap()) { // Если последнее значение убытка больше убытка позиции
Loss=OrderProfit()+OrderSwap(); // Значит тут убыток больше, запоминаем как последнее
OrdTicket=i; // Запоминаем номер убыточной позиции
}
}
}
}
if (OrdTicket>= 0 ) {
if ( OrderSelect (OrdTicket, SELECT_BY_POS, MODE_TRADES)) { // Выбираем позицию по тикету
TicketLoss=OrdTicket; // Запоминаем как тикет убыточной позыif (OrderType()==OP_BUY) // Если её тип Бай
{
Magic= 5100 ; // Задаём магик...
New_Comm= "Sell_M5_Стратегия_1_Локирующая позиция" ; // Задаём комментарий для позиции
Lots_New=NormalizeLot(OrderLots()* 2 , False, NULL ); // Увеличим лот в два разаif (!ExistPositions( NULL , OP_SELL, 5100 , 0 )){ // Если нет локирующего Sell
OpenPosition( NULL ,OP_SELL,Lots_New, 0 ,pb-tp* 100 *po,Magic,New_Comm);} // Открываем локирующий...if (ExistPositions( NULL , OP_SELL, 5100 , 0 )) // Проверяем, заодно и выбираем её
{TicketLock=OrderTicket();} // Сохраняем тикет локирующего Sell
}
if (OrderType()==OP_SELL)
{
Magic= 5100 ; // Задаём магик...
New_Comm= "Buy_M5_Стратегия_1_Локирующая позиция" ; // Задаём комментарий для позиции
Lots_New=NormalizeLot(OrderLots()* 2 , False, NULL ); // Увеличим лот в два разаif (!ExistPositions( NULL , OP_BUY, 5100 , 0 )){ // Если нет локирующего Buy
OpenPosition( NULL ,OP_BUY,Lots_New, 0 ,pa+tp* 100 *po,Magic,New_Comm);} // Открываем локирующий...if (ExistPositions( NULL , OP_BUY, 5100 , 0 )) // Проверяем, заодно и выбираем её
{TicketLock=OrderTicket();} // Сохраняем тикет локирующего Buy
}
}
}
}
으로 시작하는
//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------
최고점과 최저점을 0 막대에서 계산하지 않고 첫 번째 막대에서 0 막대에서 입찰가는 최소값보다 작을 수 없습니다.
더블
최소=입찰가, 변수 선언
최대=입찰가,
__________________________________________________________________________________________________________
(i=0;i<=20-1;i++) 여는 기준
{(낮음[i]<최소) 최소=낮음[i]인 경우:
if (High[i]>Max) Max=High[i];
}
if (...&&Ask>최대)
{
Opn_B=참; // 구매 열기
}
경우(................&&Bid<Min)
{
Opn_S=참; // 오픈 판매
}
__________________________________________________________________________________________________________
이렇게 보기 흉한 형태로 되어 있어서 아쉽습니다. 코드가 작동하지 않아 삭제해서 메모리에서 작성해야 했습니다. 그러나 당신은 전문가로서 명확해야 합니다(희망합니다).
__________________________________________________________________________________________________________
당신은 나를 아첨 :)) 나는 당신과 같은 초보자입니다 ...
그런 곳. 나는 그것을 확인하지 않았으므로 불도저에서 무릎에 썼습니다 ...글쎄요, 논리는 다음과 같습니다.
1. 101이라고 가정해 봅시다. 그리고 주문을 포지션으로 변환하기 위한 플래그를 재설정합니다. ConvOrd=false라고 가정해 봅시다.
2. 매직 101이 있는 위치가 있는지 확인하고, 있으면 변환 플래그를 설정하십시오. ConvOrd=true;
3. ConvOrd가 true인지 확인하고 ConvOrd==true인지 확인합니다.
매직 101로 위치의 존재를 확인하고 존재하지 않는 경우 -
이미 닫혀있다는 뜻입니다.
{플래그 재설정 ConvOrd=false; 새로운 지연 설정;}
플래그없이 할 수 있다고 생각합니다 ...
논리는 명확하지만 코드에서 구현하는 방법을 모르겠습니다. 많은 옵션을 시도했지만 성공하지 못했습니다. 찻주전자인 것 같아요. 그것이 내가 여기에 쓴 이유입니다. 663페이지에서 내 코드를 보여주었습니다. 욕망이 있다면 - 끝내거나 적어도 그것을 끝내는 방법을 더 구체적으로 알려주십시오. 고맙습니다.
SellStop 주문을 할 때 더 간단하게 시도하고 TakeProfit 값을 기억하고 입찰가가 이 가격 아래로 떨어지면 Buy에 두십시오.
SellStop 주문을 할 때 더 간단하게 시도하고 TakeProfit 값을 기억하고 입찰가가 이 가격 아래로 떨어지면 Buy에 두십시오.
조언 해주셔서 감사합니다! 이미 이 옵션을 시도했지만 내 전략을 구현하는 데 적합하지 않습니다.
왜 한 번에 두 개의 잠금 위치를 설정하는지 이해조차 되지 않습니다. 논리는 이렇습니다.
자기 자본이 이전 가치에서 이익의 특정 비율에 도달하면 모든 포지션을 닫습니다... 원래대로 작동합니다... 자세히...
자산이 이전 가치의 일정 비율만큼 감소하면 가장 큰 손실을 입은 포지션을 찾아 그것이 누구인지 결정합니다... 글쎄요, 거기에서 매수 또는 매도
이중 로트로 반대 방향으로 잠금 위치를 엽니다. 다음으로, 우리는 그들의 총 이익(손실 및 잠금)을 살펴보고 더 커지는 즉시,
글쎄, 10 점이라고 가정 해 봅시다. nafig를 닫으십시오 ...
사물의 논리에 따르면 다음 틱에서 형평성을 먼저 확인하고 모든 것이 정상이면 작업을 계속합니다. 선생님... 모든 것이 다시 나빠지면 다음 엘크를 찾습니다. ..
그러나 어떤 이유로 그는 한 번에 두 개의 잠금 장치를 엽니 다 ... 매수와 매도 모두, 또한 로트가 0.1이면 첫 번째 잠금 장치가 이중 로트 = 0.2로 열립니다.
그리고 두 번째 것은 그것을 다시 두 배로 늘리고 이미 많은 0.4로 열립니다 ... 따라서 그들이 지금 태양 아래의 장소를 위해 서로 싸우고 있다면 여기에서 자물쇠가 무엇입니까 ... :(
코드를 첨부하고 있습니다. 누군가가 내 손가락으로 나를 찌를 수도 있습니다.
으로 시작하는
//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------
어딘가에 잼이 살고 있습니다 ...
페이지 번호 " 666 " :-)