[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 744

 

vseravno는 이 주문의 팩을 엽니다.

이것이 전문가 입장에서의 나의 변화입니다.

 extern int TakeProfit= 18 ;
extern int StopLoss= 18 ;
extern double Lot= 0.01 ;
extern int StartTime= 0 ;
int Today= 0 ;
int h= 10 ;
int h1= 26 ;
int mag= 777 ;
bool b= 0 ,s= 0 , //соответственно бай или селл  
bs= 0 , // если закрытие по стоплоссу ордера бай
ss= 0 , // если закрытие по стоплоссу ордера sell
bt= 0 ,
st= 0 ; //      то же по ТП
double bl= 0 ,sl= 0 ; // лоты соответсвенно для бай и селл

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{


if (DayOfWeek()== 0 || DayOfWeek()== 6 ) return ( 0 ); // в выходные не работаем
if (!IsTradeAllowed()) return ( 0 ); // пропустим тик если терминал занят
int total = OrdersTotal ();
if (total == 0 )



   {NewOrder(OP_BUY,Lot);
    NewOrder(OP_SELL,Lot);
    NewOrder(OP_BUYLIMIT,Lot);
    NewOrder(OP_SELLLIMIT,Lot);
    NewOrder(OP_BUYSTOP,Lot);
    NewOrder(OP_SELLSTOP,Lot);
    Today=TimeDay( TimeCurrent ());}
    
{



for ( int cnt=OrdersHistoryTotal();cnt> 0 ;cnt--)
     {
OrderSelect (cnt, SELECT_BY_POS, MODE_HISTORY);
{ if (OrderMagicNumber()== mag &&
OrderSymbol()== Symbol ()) 
{ if (OrderType() == OP_BUY )  {b= 1 ; if (OrderClosePrice()==OrderTakeProfit()) bt= 1 ;
if (OrderClosePrice()==OrderStopLoss()) bs= 1 ; bl=OrderLots()* 100 ; break ;}
if (OrderType() == OP_SELL)  {s= 1 ; if (OrderClosePrice()==OrderTakeProfit()) st= 1 ; 
if (OrderClosePrice()==OrderStopLoss()) ss= 1 ; sl=OrderLots()* 100 ; break ;}
            }
         }
      }


} //end

if (bs== 1 ||bl== 1 )
{   
    NewOrder1(OP_BUYLIMIT,Lot);
Today=TimeDay( TimeCurrent ());}
    

그리고 여기 주문의 시작입니다

 int NewOrder1( int Cmd, double Lot)
{ double TP= 0 ; //тейкпрофит
double SL= 0 ; //стоплосс
double PR= 0 ; //Цена
double LT= 0 ; //Лот
while (!IsTradeAllowed()) Sleep ( 100 );
if (Cmd==OP_BUYLIMIT)
   {PR=Ask- Point *h;
     if (TakeProfit> 0 ) TP=PR+TakeProfit* Point ;
     if (StopLoss> 0 ) SL=PR-StopLoss* Point ;
     if (Lot> 0 ) LT= 3 *Lot;}
int tic1= OrderSend ( Symbol (),Cmd,LT,PR, 3 ,SL,TP, 0 ,mag, 0 , CLR_NONE );
//-----------
if (tic1< 0 ) Print ( GetLastError ());

if (tic1> 0 ){
b= 0 ;s= 0 ; //соответственно бай или селл  
bs= 0 ; // если закрытие по стоплоссу ордера бай
ss= 0 ; // если закрытие по стоплоссу ордера sell
bt= 0 ;
st= 0 ; //      то же по ТП
bl= 0 ;sl= 0 ; // лоты соответсвенно для бай и селл
}
//-----------
return (tic1);}
 
profitinvesting :

이익이 예를 들어 20포인트일 때 손익분기 수준에서 한 번 중지하는 함수의 코드를 알려주십시오.

답변에 미리 감사드립니다 :)

Igor Kim의 웹사이트 http://www.kimiv.ru 에서 이 기능과 기타 유용한 기능을 찾을 수 있습니다. 그리고 내가 틀리지 않았다면 당신이 필요로 하는 것은 MovingInWL()이라고 합니다.
 
ToLik_SRGV :

보리스, 더 쉽습니다. 다음 줄을 삭제합니다.

코드의 맨 위에 있습니다(어떤 기능에도 포함되지 않고 분리되도록).
그런 다음 OrderSend(...) 함수에 대한 호출이 있는 위치에서 if 문을 추가로 포함하기만 하면 됩니다.

이제 다음 거래를 열기 전에 현재 막대에 거래가 있는지 여부를 확인합니다. 그렇다면 현재 막대가 새 변수에 저장되고 현재 막대가 저장된 것과 일치하면 거래가 열리지 않습니다. 따라서 막대가 새 것인 경우 시작 시간이 새 변수의 데이터와 일치하지 않고 거래가 열리고 변수는 새 값을 받습니다.

Expert Advisor의 아키텍처를 정확히 알지 못하지만 대부분의 경우 이 방법을 사용하면 됩니다.


매우 감사합니다! 잘나왔다!
 

더 좋은 방법이 생각나지 않습니다.

일련의 배열이 있는 표시기가 있습니다. 두 번째 표시기는 이러한 배열과 함께 작동해야 합니다. 결과를 계산하고 테이블에 표시하십시오.

가장 간단한 방법은 이 표시기를 호출하는 것이지만 불가능한 것 같습니다.

외래 배열에 접근하는 방법은 무엇입니까?

 
Abzasc :

나는 생각하지 않는다

깨달았다.
 
LAIT123 :

안녕하세요 MT4에서 로그를 보는 방법을 알려주세요

하나의 콘텐츠로 15개의 게시물을 작성할 필요가 없습니다. 그리고 그것이 효과가 있다면 자신을 정리하는 것이 바람직합니다. 삼촌을 기다리지 마십시오.
 
artmedia70 :

아마도, 글쎄, 그것은 매우 필요합니다 ... :) 또는 마우스가 붙어 있습니다 ...



쥐가 붙은 것이 아닙니다. 이것은 조바심입니다. 결국 20분 15개의 게시물을 삭제했습니다.
 
Vinin :

쥐가 붙은 것이 아닙니다.
그는 채팅이 있다고 생각했습니다 :)
 
FoxUA :

vseravno는 이 주문의 팩을 엽니다.

이것이 전문가 입장에서의 나의 변화입니다.

그리고 여기 주문의 시작입니다

일반적으로 나는 그것이 당신에게 어떤 느낌인지 이해하지 못합니다 ... 중괄호는 서로 일치하지 않으며 닫는 하나는 완전히 손실됩니다 ... 악마 자신이 다리를 부러 뜨릴 것입니다. 코드를 정리하세요... 다루기 어렵고 컴파일하고 실행할 방법이 없습니다. 우리는 코드를 작업 중입니다...
 
Vinin :

쥐가 붙은 것이 아닙니다. 이것은 조바심입니다. 결국 20분 15개의 게시물을 삭제했습니다.
:) 조급함은 일반적으로 다른 사무실에서 훈련됩니다... :)