var tribe_dropdowns = window.tribe_dropdowns || {}; ( function( $, obj, _ ) { 'use strict'; obj.selector = { dropdown: '.tribe-dropdown', created: '.tribe-dropdown-created', searchField: '.select2-search__field', }; // Setup a Dependent $.fn.tribe_dropdowns = function() { obj.dropdown( this, {} ); return this; }; obj.freefrom_create_search_choice = function( params ) { if ( 'string' !== typeof params.term ) { return null; } var term = params.term.trim(); if ( '' === term ) { return null; } var args = this.options.options; var $select = args.$select; if ( term.match( args.regexToken ) && ( ! $select.is( '[data-int]' ) || ( $select.is( '[data-int]' ) && term.match( /\d+/ ) ) ) ) { var choice = { id: term, text: term, new: true }; if ( $select.is( '[data-create-choice-template]' ) ) { choice.text = _.template( $select.data( 'createChoiceTemplate' ) )( { term: term } ); } return choice; } return null; }; /** * Better Search ID for Select2, compatible with WordPress ID from WP_Query * * @param {object|string} e Searched object or the actual ID * @return {string} ID of the object */ obj.search_id = function( e ) { var id = undefined; if ( 'undefined' !== typeof e.id ) { id = e.id; } else if ( 'undefined' !== typeof e.ID ) { id = e.ID; } else if ( 'undefined' !== typeof e.value ) { id = e.value; } return undefined === e ? undefined : id; }; /** * Better way of matching results * * @param {string} term Which term we are searching for * @param {string} text Search here * @return {boolean} */ obj.matcher = function( params, data ) { // If there are no search terms, return all of the data if ( 'string' !== typeof params.term || params.term.trim() === '') { return data; } // Do not display the item if there is no 'text' property if ( typeof data.text === 'undefined' ) { return null; } var term = params.term.trim(); var text = data.text; var $select = $( data.element ).closest( 'select' ); var args = $select.data( 'dropdown' ); var result = text.toUpperCase().indexOf( term.toUpperCase() ) !== -1; if ( ! result && 'undefined' !== typeof args.tags ){ var possible = _.where( args.tags, { text: text } ); if ( args.tags.length > 0 && _.isObject( possible ) ){ var test_value = obj.search_id( possible[0] ); result = test_value.toUpperCase().indexOf( term.toUpperCase() ) !== -1; } } return result; }; /** * If the element used as the basis of a dropdown specifies one or more numeric/text * identifiers in its val attribute, then use those to preselect the appropriate options. * * @param {object} $select * @param {function} make_selection */ obj.init_selection = function( $select, make_selection ) { var isMultiple = $select.is( '[multiple]' ); var options = $select.data( 'dropdown' ); var currentValues = $select.val().split( options.regexSplit ); var selectedItems = []; $( currentValues ).each( function( index, value ) { // eslint-disable-line no-unused-vars var searchFor = { id: this, text: this }; var data = options.ajax ? $select.data( 'options' ) : options.data; var locatedItem = find_item( searchFor, data ); if ( locatedItem && locatedItem.selected ) { selectedItems.push( locatedItem ); } } ); if ( selectedItems.length && isMultiple ) { make_selection( selectedItems ); } else if ( selectedItems.length ) { make_selection( selectedItems[ 0 ] ); } else { make_selection( false ); return; } }; /** * Searches array 'haystack' for objects that match 'description'. * * The 'description' object should take the form { id: number, text: string }. The first * object within the haystack that matches one of those two properties will be returned. * * If objects contain an array named 'children', then that array will also be searched. * * @param {Object} description * @param {Array} haystack * * @return {Object|boolean} */ function find_item( description, haystack ) { if ( ! _.isArray( haystack ) ) { return false; } for ( var index in haystack ) { var possible_match = haystack[ index ]; if ( possible_match.hasOwnProperty( 'id' ) && possible_match.id == description.id ) { // eslint-disable-line no-prototype-builtins,eqeqeq,max-len return possible_match; } if ( possible_match.hasOwnProperty( 'text' ) && possible_match.text == description.text ) { // eslint-disable-line no-prototype-builtins,eqeqeq,max-len return possible_match; } if ( possible_match.hasOwnProperty( 'children' ) && _.isArray( possible_match.children ) ) { // eslint-disable-line no-prototype-builtins,max-len var subsearch = find_item( description, possible_match.children ); if ( subsearch ) { return subsearch; } } } return false; } obj.getSelectClasses = function( $select ) { var classesToRemove = [ 'select2-hidden-accessible', 'hide-before-select2-init', ]; var originalClasses = $select.attr( 'class' ).split( /\s+/ ); return _.difference( originalClasses, classesToRemove ); }; obj.element = function( field, args ) { var $select = $( field ); var args = $.extend( {}, args ); // eslint-disable-line no-redeclare var carryOverData = [ // eslint-disable-line no-unused-vars 'depends', 'condition', 'conditionNot', 'condition-not', 'conditionNotEmpty', 'condition-not-empty', 'conditionEmpty', 'condition-empty', 'conditionIsNumeric', 'condition-is-numeric', 'conditionIsNotNumeric', 'condition-is-not-numeric', 'conditionChecked', 'condition-is-checked', ]; var $container; // Add a class for dropdown created $select.addClass( obj.selector.created.className() ); // args.debug = true; // For Reference we save the jQuery element as an Arg. args.$select = $select; // Auto define the Width of the Select2. args.dropdownAutoWidth = true; args.width = 'resolve'; // CSS for the container args.containerCss = {}; // Only apply visibility when it's a Visible Select2. if ( $select.is( ':visible' ) ) { args.containerCss.display = 'inline-block'; args.containerCss.position = 'relative'; } // CSS for the dropdown args.dropdownCss = {}; args.dropdownCss.width = 'auto'; // When we have this we replace the default with what's in the param. if ( $select.is( '[data-dropdown-css-width]' ) ) { args.dropdownCss.width = $select.data( 'dropdown-css-width' ); if ( ! args.dropdownCss.width || 'false' === args.dropdownCss.width ) { delete args.dropdownCss.width; delete args.containerCss; } } // By default we allow The field to be cleared args.allowClear = true; if ( $select.is( '[data-prevent-clear]' ) ) { args.allowClear = false; } // Pass the "Searching..." placeholder if specified if ( $select.is( '[data-searching-placeholder]' ) ) { args.formatSearching = $select.data( 'searching-placeholder' ); } // If we are dealing with a Input Hidden we need to set the Data for it to work if ( ! $select.is( '[data-placeholder]' ) && $select.is( '[placeholder]' ) ) { args.placeholder = $select.attr( 'placeholder' ); } // If we are dealing with a Input Hidden we need to set the Data for it to work. if ( $select.is( '[data-options]' ) ) { args.data = $select.data( 'options' ); } // With less then 10 args we wouldn't show the search. args.minimumResultsForSearch = 10; // Prevents the Search box to show if ( $select.is( '[data-hide-search]' ) ) { args.minimumResultsForSearch = Infinity; } // Makes sure search shows up. if ( $select.is( '[data-force-search]' ) ) { delete args.minimumResultsForSearch; } // Allows freeform entry if ( $select.is( '[data-freeform]' ) ) { args.createTag = obj.freefrom_create_search_choice; args.tags = true; $select.data( 'tags', true ); } if ( $select.is( '[multiple]' ) ) { args.multiple = true; // Set the max select items, if defined if ( $select.is( '[data-maximum-selection-size]' ) ) { args.maximumSelectionSize = $select.data( 'maximum-selection-size' ); } // If you don't have separator, add one (comma) if ( ! $select.is( 'data-separator' ) ) { $select.data( 'separator', ',' ); } if ( ! _.isArray( $select.data( 'separator' ) ) ) { args.tokenSeparators = [ $select.data( 'separator' ) ]; } else { args.tokenSeparators = $select.data( 'separator' ); } args.separator = $select.data( 'separator' ); // Define the regular Exp based on args.regexSeparatorElements = [ '^(' ]; args.regexSplitElements = [ '(?:' ]; $.each( args.tokenSeparators, function ( i, token ) { args.regexSeparatorElements.push( '[^' + token + ']+' ); args.regexSplitElements.push( '[' + token + ']' ); } ); args.regexSeparatorElements.push( ')$' ); args.regexSplitElements.push( ')' ); args.regexSeparatorString = args.regexSeparatorElements.join( '' ); args.regexSplitString = args.regexSplitElements.join( '' ); args.regexToken = new RegExp( args.regexSeparatorString, 'ig' ); args.regexSplit = new RegExp( args.regexSplitString, 'ig' ); } // Select also allows Tags, so we go with that too if ( $select.is( '[data-tags]' ) ) { args.tags = $select.data( 'tags' ); args.createSearchChoice = function( term, data ) { // eslint-disable-line no-unused-vars if ( term.match( args.regexToken ) ) { return { id: term, text: term }; } }; if ( 0 === args.tags.length ) { args.formatNoMatches = function() { return $select.attr( 'placeholder' ); }; } } // When we have a source, we do an AJAX call if ( $select.is( '[data-source]' ) ) { var source = $select.data( 'source' ); // For AJAX we reset the data args.data = { results: [] }; // Format for Parents breadcrumbs args.formatResult = function ( item, container, query ) { // eslint-disable-line no-unused-vars,max-len if ( 'undefined' !== typeof item.breadcrumbs ) { return $.merge( item.breadcrumbs, [ item.text ] ).join( ' » ' ); } return item.text; }; // instead of writing the function to execute the request we use Select2's convenient helper. args.ajax = { dataType: 'json', type: 'POST', url: obj.ajaxurl(), // parse the results into the format expected by Select2. processResults: function ( response, page, query ) { // eslint-disable-line no-unused-vars if ( ! $.isPlainObject( response ) || 'undefined' === typeof response.success ) { console.error( 'We received a malformed Object, could not complete the Select2 Search.' ); // eslint-disable-line max-len return { results: [] }; } if ( ! $.isPlainObject( response.data ) || 'undefined' === typeof response.data.results ) { console.error( 'We received a malformed results array, could not complete the Select2 Search.' ); // eslint-disable-line max-len return { results: [] }; } if ( ! response.success ) { if ( 'string' === $.type( response.data.message ) ) { console.error( response.data.message ); } else { console.error( 'The Select2 search failed in some way... Verify the source.' ); } return { results: [] }; } return response.data; }, }; // By default only send the source args.ajax.data = function( search, page ) { return { action: 'tribe_dropdown', source: source, search: search, page: page, args: $select.data( 'source-args' ), }; }; } // Attach dropdown to container in DOM. if ( $select.is( '[data-attach-container]' ) ) { // If multiple, attach container without search. if ( $select.is( '[multiple]' ) ) { $.fn.select2.amd.define( 'AttachedDropdownAdapter', [ 'select2/utils', 'select2/dropdown', 'select2/dropdown/attachContainer', ], function( utils, dropdown, attachContainer ) { return utils.Decorate( dropdown, attachContainer ); } ); args.dropdownAdapter = $.fn.select2.amd.require( 'AttachedDropdownAdapter' ); // If not multiple, attach container with search. } else { $.fn.select2.amd.define( 'AttachedWithSearchDropdownAdapter', [ 'select2/utils', 'select2/dropdown', 'select2/dropdown/search', 'select2/dropdown/minimumResultsForSearch', 'select2/dropdown/attachContainer', ], function( utils, dropdown, search, minimumResultsForSearch, attachContainer ) { var adapter = utils.Decorate( dropdown, attachContainer ); adapter = utils.Decorate( adapter, search ); adapter = utils.Decorate( adapter, minimumResultsForSearch ); return adapter; } ); args.dropdownAdapter = $.fn.select2.amd.require( 'AttachedWithSearchDropdownAdapter' ); } } // Save data on Dropdown $select.data( 'dropdown', args ); $container = $select.select2TEC( args ); // Propagating original input classes to the select2 container. $container.data( 'select2' ).$container.addClass( obj.getSelectClasses( $select ).join( ' ' ) ); // Propagating original input classes to the select2 container. $container.data( 'select2' ).$container.removeClass( 'hide-before-select2-init' ); $container.on( 'select2:open', obj.action_select2_open ); /** * @todo @bordoni Investigate how and if we should be doing this. * if ( carryOverData.length > 0 ) { carryOverData.map( function( dataKey ) { var attr = 'data-' + dataKey; var val = $select.attr( attr ); if ( ! val ) { return; } this.attr( attr, val ); }, $container ); } */ }; obj.ajaxurl = function() { if ( 'undefined' !== typeof window.ajaxurl ) { return window.ajaxurl; } if ( 'undefined' !== typeof TEC && 'undefined' !== typeof TEC.ajaxurl ) { return TEC.ajaxurl; } console.error( 'Dropdowns framework cannot properly do an AJAX request without the WordPress `ajaxurl` variable setup.' ); // eslint-disable-line max-len }; obj.action_select2_open = function( event ) { // eslint-disable-line no-unused-vars var $select = $( this ); var select2Data = $select.data( 'select2' ); var $search = select2Data.$dropdown.find( obj.selector.searchField ); // eslint-disable-line es5/no-es6-methods,max-len select2Data.$dropdown.addClass( obj.selector.dropdown.className() ); // If we have a placeholder for search, apply it! if ( $select.is( '[data-search-placeholder]' ) ) { $search.attr( 'placeholder', $select.data( 'searchPlaceholder' ) ); } }; /** * Configure the Drop Down Fields * * @param {jQuery} $fields All the fields from the page * @param {array} args Allow extending the arguments * * @return {jQuery} Affected fields */ obj.dropdown = function( $fields, args ) { var $elements = $fields.not( '.select2-offscreen, .select2-container, ' + obj.selector.created.className() ); // eslint-disable-line max-len if ( 0 === $elements.length ) { return $elements; } // Default args to avoid Undefined if ( ! args ) { args = {}; } $elements .each( function( index, element ) { // Apply element to all given items and pass args obj.element( element, args ); } ); // return to be able to chain jQuery calls return $elements; }; $( function() { $( obj.selector.dropdown ).tribe_dropdowns(); } ); // Addresses some problems with Select2 inputs not being initialized when using a browser's "Back" button. $( window ).on( 'unload', function() { $( obj.selector.dropdown ).tribe_dropdowns(); }); } )( jQuery, tribe_dropdowns, window.underscore || window._ ); /*! elementor-pro - v3.5.1 - 10-11-2021 */ .elementor-cta,.elementor-widget-call-to-action .elementor-widget-container{overflow:hidden}.elementor-cta{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-cta--skin-classic .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--skin-classic .elementor-cta__bg-wrapper{position:relative;min-height:200px;width:100%}.elementor-cta--skin-classic .elementor-cta__content{-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s;width:100%;background-color:#f7f7f7}.elementor-cta--skin-classic .elementor-cta__content-item,.elementor-cta--skin-classic .elementor-cta__content-item .elementor-icon{color:#55595c;border-color:#55595c;fill:#55595c}.elementor-cta--skin-classic .elementor-cta__button.elementor-button{color:#55595c;border-color:#55595c}.elementor-cta--skin-cover .elementor-cta{display:block}.elementor-cta--skin-cover .elementor-cta__bg-wrapper{position:absolute;top:0;left:0;right:0;bottom:0;-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s;width:100%}.elementor-cta--skin-cover .elementor-cta__content{min-height:280px}.elementor-cta--skin-cover .elementor-cta__button.elementor-button,.elementor-cta--skin-cover .elementor-cta__content-item,.elementor-cta--skin-cover .elementor-cta__content-item .elementor-icon{color:#fff;border-color:#fff}.elementor-cta--layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--layout-image-left .elementor-cta,.elementor-cta--layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--layout-image-left .elementor-cta__content,.elementor-cta--layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.elementor-cta__bg,.elementor-cta__bg-overlay{position:absolute;top:0;left:0;right:0;bottom:0;-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s}.elementor-cta__bg-wrapper{z-index:1;overflow:hidden}.elementor-cta__bg{-webkit-background-size:cover;background-size:cover;background-position:50%;z-index:1}.elementor-cta__bg-overlay{z-index:2}.elementor-cta__button.elementor-button{cursor:pointer;-ms-flex-item-align:center;align-self:center;margin-left:auto;margin-right:auto;border:2px solid #fff;background:transparent}.elementor-cta__button.elementor-button:hover{background:transparent;text-decoration:none}.elementor-cta__title{font-size:23px}.elementor-cta__content{z-index:1;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;padding:35px;width:100%}.elementor-cta__content,.elementor-cta__content-item{position:relative;-webkit-transition:.5s;-o-transition:.5s;transition:.5s;color:#fff}.elementor-cta__content-item{width:100%;margin:0}.elementor-cta__content-item:not(:last-child){margin-bottom:15px}.elementor-cta__content-item .elementor-icon{color:#fff}.elementor-cta--valign-top .elementor-cta__content{-ms-flex-line-pack:start;align-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.elementor-cta--valign-middle .elementor-cta__content{-ms-flex-line-pack:center;align-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.elementor-cta--valign-bottom .elementor-cta__content{-ms-flex-line-pack:end;align-content:flex-end;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.elementor-cta:hover .elementor-cta__bg-overlay{background-color:rgba(0,0,0,.3)}@media (max-device-width:1024px){.elementor-cta{cursor:pointer}}@media (min-width:-1px){.elementor-cta--widescreen-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--widescreen-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--widescreen-layout-image-left .elementor-cta,.elementor-cta--widescreen-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--widescreen-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--widescreen-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--widescreen-layout-image-left .elementor-cta__content,.elementor-cta--widescreen-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--widescreen-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--widescreen-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:-1px){.elementor-cta--laptop-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--laptop-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--laptop-layout-image-left .elementor-cta,.elementor-cta--laptop-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--laptop-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--laptop-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--laptop-layout-image-left .elementor-cta__content,.elementor-cta--laptop-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--laptop-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--laptop-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:-1px){.elementor-cta--tablet_extra-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--tablet_extra-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--tablet_extra-layout-image-left .elementor-cta,.elementor-cta--tablet_extra-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--tablet_extra-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--tablet_extra-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--tablet_extra-layout-image-left .elementor-cta__content,.elementor-cta--tablet_extra-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--tablet_extra-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--tablet_extra-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:1024px){.elementor-cta--tablet-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--tablet-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--tablet-layout-image-left .elementor-cta,.elementor-cta--tablet-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--tablet-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--tablet-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--tablet-layout-image-left .elementor-cta__content,.elementor-cta--tablet-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--tablet-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--tablet-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:-1px){.elementor-cta--mobile_extra-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--mobile_extra-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--mobile_extra-layout-image-left .elementor-cta,.elementor-cta--mobile_extra-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--mobile_extra-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--mobile_extra-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--mobile_extra-layout-image-left .elementor-cta__content,.elementor-cta--mobile_extra-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--mobile_extra-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--mobile_extra-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:767px){.elementor-cta--mobile-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--mobile-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--mobile-layout-image-left .elementor-cta,.elementor-cta--mobile-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--mobile-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--mobile-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--mobile-layout-image-left .elementor-cta__content,.elementor-cta--mobile-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--mobile-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--mobile-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.elementor-ribbon{position:absolute;z-index:1;top:0;left:0;right:auto;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);width:150px;overflow:hidden;height:150px}.elementor-ribbon-inner{text-align:center;left:0;width:200%;-webkit-transform:translateY(-50%) translateX(0) translateX(35px) rotate(-45deg);-ms-transform:translateY(-50%) translateX(0) translateX(35px) rotate(-45deg);transform:translateY(-50%) translateX(0) translateX(35px) rotate(-45deg);margin-top:35px;font-size:13px;line-height:2;font-weight:800;text-transform:uppercase;background:#000;color:#fff}.elementor-ribbon.elementor-ribbon-left{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);left:0;right:auto}.elementor-ribbon.elementor-ribbon-right{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);left:auto;right:0}
Warning: Cannot modify header information - headers already sent by (output started at /home1/brighdbt/public_html/premills.com/wp-content/plugins/svg-support/functions/thumbnail-display.php:1) in /home1/brighdbt/public_html/premills.com/wp-includes/feed-rss2.php on line 8
Форекс обучение Archives - premier mills https://www.premills.com/category/foreks-obuchenie-3/ Mon, 02 Jun 2025 14:48:41 +0000 en-US hourly 1 https://wordpress.org/?v=6.8.1 https://www.premills.com/wp-content/uploads/2021/08/PM_No.1_Favicon-01.png Форекс обучение Archives - premier mills https://www.premills.com/category/foreks-obuchenie-3/ 32 32 Фигуры Технического Анализа Треугольники Симметричный И Расширяющиеся Финансовый Журнал Fortrader Org https://www.premills.com/figury-tehnicheskogo-analiza-treugolniki/ https://www.premills.com/figury-tehnicheskogo-analiza-treugolniki/#respond Sat, 08 Mar 2025 03:53:03 +0000 https://www.premills.com/?p=8807 Тенденция глобально поменялась и можно было взять намного больше прибыли, чем по примеру. AMarkets — международный онлайн-брокер, работающий с 2007 года. Наша миссия — предоставлять клиентам и партнерам во всем мире возможность стать успешными на финансовых рынках. На графике — нарастающее давление со стороны продавцов, заставляющее рынок поворачивать вниз. Симметричный треугольник — графический образ, символизирующий […]

The post Фигуры Технического Анализа Треугольники Симметричный И Расширяющиеся Финансовый Журнал Fortrader Org appeared first on premier mills.

]]>
Тенденция глобально поменялась и можно было взять намного больше прибыли, чем по примеру. AMarkets — международный онлайн-брокер, работающий с 2007 года. Наша миссия — предоставлять клиентам и партнерам во всем мире возможность стать успешными на финансовых рынках. На графике — нарастающее давление со стороны продавцов, заставляющее рынок поворачивать вниз. Симметричный треугольник — графический образ, символизирующий падение волатильности и намек на очень вероятный ценовой прорыв в скором времени. Минимумы треугольника, расположенные выше основной массы минимумов — хороший знак, намекающий на то, что есть шанс прорваться выше.

На графике ниже представлен пример появления «‎симметричного треугольника» для инструмента XAUUSD на дневном таймфрейме в период с марта по апрель 2023 года. «‎Бычий симметричный треугольник» образуется в условиях восходящего тренда и указывает на его возможное продолжение. В рамках паттерна цена движется в узком диапазоне, постепенно сходясь к точке, где вероятен новый импульс.

Торговые Сигналы Фигуры Расширяющийся Треугольник

К недостаткам следует отнести сложность визуального определения у некоторых трейдеров. Если Вы будете часто тренировать глаз в распознавании этого элемента, то в будущем определить треугольник на графике не составит проблем. На представленном рисунке, изображена фигура технического анализа нисходящий треугольник. В таком контексте, когда цена заходит в треугольник снизу, другими словами идет up тренд, пробой должен состояться вверх и будет все правильно и по закону. Если мы видим, что цену зажимают в фигуру технического анализа Треугольник, то чего нам торопиться?

Пример «‎симметричного Треугольника»

Если цена находится выше 200 MA — долгосрочный тренд восходящий. Если цена находится ниже 200 MA — долгосрочный тренд нисходящий. Клинья могут иметь продолжать текущий тренд или иметь разворотный характер. Точка B — идеальное место для установки стоп-лосса, потому что, если рынок достигнет этой точки, вы будете знать, что фигура восходящего треугольника была сломлена. Однако изучив фигуру треугольник, мы теперь понимаем, что очень важно обращать внимание на то, как цена подходит к уровню. Эти типы треугольников имеют плоскую горизонтальную сторону и одну наклонную сторону, которая движется к плоской горизонтальной стороне.

фигура треугольник симметричный

И хотя цена в дальнейшем продолжила снижаться, мы не могли на это полагаться при принятии решения о входе в рынок. У каждого из этих методов есть свои преимущества и недостатки. Как я постоянно говорю, лучший подход — это тот подход, который работает для вас.

  • Расширяющийся или восходящий треугольник будет сильным разворотным сигналом, если сформировался на окончании тренда.
  • Более высокие минимумы цены, которые подтягиваются к уровню, означают силу покупателей.
  • Краткосрочные трейдеры могут использовать меньшие интервалы времени, например, 15 минут или 1 час, чтобы быстро реагировать на пробои.
  • Обычно формируется в конце периода флэта, когда рынок начинает новый длительный тренд.

Появление этих паттернов дает нам подходящую точку для входа в рынок. Линия тренда проведенная через пики, носит восходящую тенденцию. Это расстояние делится на 4, берется 3 части и делается пометка.Что дает нам это расстояние в три четверти. Это дает понимание когда будет совершен прорыв, и его силу.

фигура треугольник симметричный

Например, если известны две стороны (катеты или катет и гипотенуза), можно сначала вычислить третью сторону (по теореме Пифагора), затем найти периметр и площадь. Для того чтобы симметричный треугольник считался правильным, наклонные линии должны проходить как минимум через два локальных максимума и два локальных минимума. Верхняя линия должна быть направлена вниз, а нижняя – вверх. Если треугольник был построен во время флэта, а также на минутном или часовом таймфрейме, то может возникать много шумов.

Однако, в среднесрочной перспективе рынок уже медвежий, поэтому всегда смотрим на младшие таймфреймы, чтобы вовремя увидеть начало падения. Образование разворотной фигуры вверху рынка на валютной паре GBPUSD. Обратных поход цены наверх дал точку входа на нижней грани, а тейк профит получился больше во втором способе.

Защитную заявку надо располагать внутри фигуры лучшие форекс брокеры за пробитой границей. Ложные пробои могут случаться в рынках с низкой волатильностью или в периодах с малым объемом торговли. Когда происходит ложный пробой, трейдеры должны быть готовы выйти из позиции, чтобы минимизировать потери. Установка стоп-лосса ниже нижней линии треугольника при длинных позициях и выше верхней линии при коротких позициях поможет защитить капитал. «‎Вымпел», напротив, обычно формируется после резкого движения цены и является паттерном продолжения тренда. Он указывает на кратковременную консолидацию, после которой цена обычно продолжает движение в сторону предыдущего тренда.

Дождитесь пробоя – после него вероятнее всего тренд пойдет в его сторону. Не забываем, что нисходящие движения по времени длятся меньше, чем восходящие и силы продавцов более ограничены. Как это ни странно выглядит на первый взгляд, для снижения цены необходимо больше усилий и это причина многочисленных ложных пробоев и ретестов.

Опытные трейдеры ведут журнал сделок, анализируя который, выявляют различные нюансы той или иной фигуру. У трейдера должно быть преимущество перед другими и именно https://boriscooper.org/ статистика дает это преимущество, в противном случае мы ни чем не будем отличаться от сливаторов. Перечитав еще раз статью, считаю ее очень качественно написанной, с очень подробным описанием того, что в действительности происходит на рынке.

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

Для долгосрочного тренда вы также можете использовать скользящую среднюю с периодом 200. В следующей технике мы открываем сделку только после того, как случится пробой уровня, и цена закрепится за ним. Неплохо, когда есть точечные объемы в месте пробития фигуры (сработали приказы участников) и на откате треугольники в трейдинге к ее формирующей линии. Остальные объемы во время построения фигуры мало расскажут о дальнейшей отработке. Проще говоря, это две линии, которые пересекаются, тем самым формируя паттерн треугольник.

The post Фигуры Технического Анализа Треугольники Симметричный И Расширяющиеся Финансовый Журнал Fortrader Org appeared first on premier mills.

]]>
https://www.premills.com/figury-tehnicheskogo-analiza-treugolniki/feed/ 0
Какой Таймфрейм Выбрать Индикаторы Таймфрейма https://www.premills.com/kakoj-tajmfrejm-vybrat-indikatory-tajmfrejma/ https://www.premills.com/kakoj-tajmfrejm-vybrat-indikatory-tajmfrejma/#respond Mon, 11 Nov 2024 22:32:35 +0000 https://www.premills.com/?p=8721 Но, на самом деле, так работают многие инвестиционные и хедж-фонды. Стратегия для часового таймфрейма может быть совершенно любой. Главное, чтобы она позволяла закрывать https://boriscooper.org/ сделку в течение суток. Кто знает, когда вам придет в голову переместиться в другую категорию? За счет этого вы будете расти и подниматься, наращивать свои обороты. Волновой анализ предполагает использование нескольких […]

The post Какой Таймфрейм Выбрать Индикаторы Таймфрейма appeared first on premier mills.

]]>
Но, на самом деле, так работают многие инвестиционные и хедж-фонды. Стратегия для часового таймфрейма может быть совершенно любой. Главное, чтобы она позволяла закрывать https://boriscooper.org/ сделку в течение суток.

Кто знает, когда вам придет в голову переместиться в другую категорию? За счет этого вы будете расти и подниматься, наращивать свои обороты. Волновой анализ предполагает использование нескольких таймфреймов для получения целостного представления о рыночной структуре и повышения точности прогнозирования. Выбор таймфрейма для торговли на бирже — ответственный процесс, требующий изучения слабых и сильных сторон каждого из вариантов. Для наглядности рассмотрим разные ТФ, их плюсы и минусы в табличном виде.

Как Связаны Таймфреймы И Типы Торговли

Можно торговать в любое время суток и  очень просто определить сигнал. Однако стратегия требует постоянного мониторинга и не позволяет торговать отложенными заявками. На старшем таймфрейме определяется главный тренд, затем ищется его подтверждение на меньших таймфреймах.

Часто Задаваемые Вопросы По Торговле С Тремя Таймфреймами

на каком таймфрейме лучше торговать

Хотя некоторые спекулянты могут работать по несколько дней, особенно, если на рынке затишье и ожидается существенное движение. Кстати, при торговле по 3-м таймфреймам используют именно свечной график, так как быстрее всего определить тренд сравнив цвет последних свечей на разных таймфреймах. Когда с глобальным трендом все ясно, необходимо определить текущий. Следующий таймфрейм показывает среднесрочный уклон, и, если глобальный указывал на тенденцию 2-3 дней, то текущий показывает то, что происходит внутри дня.

При таком подходе более крупные временные рамки обычно используются для установления долгосрочного тренда, а более короткие — для выявления идеальных входов. Часто, глядя на дневной график, становится ясно, что выбранный тренд явно остается в силе при соблюдении правильных временных рамок. Тайм фрейм в трейдинге является временным интервалом, который используется, чтобы сгруппировать котировки валюты мира в ценовой график – бар, «японскую свечу», линейный график и т.д. Простыми словами, это отрезок времени, который применяет трейдер, чтобы оценить ситуацию. Дейтрейдинг больше подходит опытным профессиональным трейдерам.

на каком таймфрейме лучше торговать

Стратегия Торговли На Основе Двух Таймфреймов С Использованием Скользящих Средних

Если бы в окне терминала не отображался таймфрейм, то было бы невозможно отличить, например, М5 от Н4. Несмотря на различие с точки зрения временного фактора, характер движения цены примерно совпадает. Встречаются импульсы, флетовые периоды, отрабатывают графические и свечные паттерны. Большинство новичков либо не комбинирует разные временные интервалы, либо делает это с ошибками. В итоге только усложняют себе жизнь, не получая дополнительных преимуществ. Поэтому рекомендую ознакомиться с этим материалом даже тем, кто уверен в том, что все делает правильно.

Текущий тренд на более низком таймфрейме дает необходимое подтверждение направления внутридневного движения. Как видно на графике, возможный разворот у линии сопротивления подтверждается. Цена предпринимает попытку выхода из локального бокового канала и уже пересекла минимумы дневного тренда.

Они не являются прямыми сигналами для входа в сделку, рассматривать их нужно  в сочетании с данными «стакана» и другими техническими индикаторами. Младшие интервалы требуют значительно большего контроля, чем старшие. Нужно будет отслеживать рынок согласно выбранному периоду, что в случае с краткосрочными периодами, требует большой вовлеченности трейдера в торговый процесс. Важно учесть, что долгосрочное инвестирование имеет смысл только при значительном объеме капитала. Именно поэтому многие новички отдают предпочтение коротким фреймам, которые позволяют открыть и закрыть несколько сделок за одну торговую сессию.

Выбор зависит от пожеланий конкретного трейдера, вариант должен полностью согласовываться со стилем торговли. Можно только отметить, что абсолютно всем участникам торгов пригодятся длинные временные промежутки. Они позволяют оценить господствующую тенденцию на рынке, чтобы не торговать против тренда. Не стоит игнорировать это правило, чтобы не получить убытки в самом начале своего пути на фондовом рынке. Смысл стратегии заключается в том, чтобы на младшем (пятиминутном) таймфрейме, торговать в сторону движения и сигналов старшего интервала (дневного). В другую сторону сделки не совершаются, только в сторону основного движения.

  • Вроде две совершенно разные ситуации, точнее, виден только последний рывок роста и ретест seventy five (рис.2).
  • Если предполагается инвестирование на периоды от недели до месяца, то хорошо подойдет D1.
  • Без их понимания и умения использовать невозможно прибыльно торговать.
  • Представленные данные – это только предположения, основанные на нашем опыте.

Сиюминутная прибыль им неинтересна, они мыслят более глобально и торгуют по-крупному в расчете на весомую прибыль. Анализируют старшие таймфреймы (D1 — WN) и выставляют стопы  до 100 — 200 пп. Правильное размещение уровней тейк-профита и стоп-лосса является основой эффективного управления капиталом и ключом к сохранению прибыли на финансовых рынках. Всё же рынки в последнее время довольно шумные, и процент положительных сделок не всегда остаётся на желаемом уровне, а более длинные стопы часто лишь продлевают агонию.

В то время как более длительные периоды времени полезны для идентификации установки сделки, более короткие необходимы для детального анализа. При торговле на 15-минутном таймфрейме не нужно оставлять позиции на ночь. Дейтрейдеры закрывают все ордера до конца торгового дня и не рискуют слить депозит из-за ночных “скачков”. Но здесь немало денег придется потратить на оплату комиссий. Помимо этого, открывать подряд много сделок сложно психологически.

Поэтому очень важно иметь четкое представление о временных рамках торговли на форексе с самой первой сделки. Таймфрейм в трейдинге простыми словами – это то, от чего зависят ключевые показатели вашей торговли. Он влияет на частоту торговли, размер стопа, нагрузку на депозит, просадку счета и прочие показатели. Комбинирование нескольких временных интервалов практически не на каком таймфрейме лучше торговать имеет недостатков, но позволяет получить преимущества разных timeframes.

Это связано с психотипом трейдера и нервозностью из-за переноса сделок через ночь. Поэтому не используется интервал выше н1 для определения точек входа. Популярными сочетаниями являются м15 – н1, м5 – н1, м1 – м15. Есть разные типы трейдеров, одни заточены на долгосрочную торговлю, другие на краткосрочные спекуляции.

Отдельным способом отображения ценовых колебаний считается тиковый график. Сохранить моё имя, e mail и адрес сайта в этом браузере для последующих моих комментариев. Долгосрочные сделки подойдут не всем, они требуют определенного склада характера и наличия серьезных финансовых вложений.

The post Какой Таймфрейм Выбрать Индикаторы Таймфрейма appeared first on premier mills.

]]>
https://www.premills.com/kakoj-tajmfrejm-vybrat-indikatory-tajmfrejma/feed/ 0